ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #5411  
Старый 13.06.2010, 21:30
Аватар для Irdis
Irdis
Участник форума
Регистрация: 06.02.2006
Сообщений: 177
Провел на форуме:
1576821

Репутация: 88
Отправить сообщение для Irdis с помощью ICQ
По умолчанию

Grek
смотрим на const char * format
и для чего он нужен
http://www.cplusplus.com/reference/clibrary/cstdio/fprintf/
 
Ответить с цитированием

  #5412  
Старый 13.06.2010, 21:41
Аватар для rudvil
rudvil
Участник форума
Регистрация: 25.08.2008
Сообщений: 187
Провел на форуме:
2066562

Репутация: 86
По умолчанию

2Grek мешать С++ с Си не хорошо
Код:
#include <iostream>
#include <locale>
#include <fstream>
#include <string>

struct user {
  std::string name;
  std::string nick;
  std::string email;
  int icq;
};

int main(int argc, char* argv[]) {
  std::setlocale(LC_ALL, "Russian");

  user userdata;

  std::cout << "Введите имя\n";
  std::cin >> userdata.name;

  std::cout << "Введите ник\n";
  std::cin >> userdata.nick;

  std::cout << "Введите Email\n";
  std::cin >> userdata.email;

  std::cout << "Введите icq\n";
  std::cin >> userdata.icq;

  std::ofstream file("C:\\user.txt");

  file << "name:" << userdata.name << "\n";
  file << "nick:" << userdata.nick << "\n";
  file << "email:" << userdata.email << "\n";
  file << "icq:" << userdata.icq;

  file.close();
  system("pause");
}
вот так точно будет работать.
 
Ответить с цитированием

  #5413  
Старый 13.06.2010, 21:47
Аватар для Grek
Grek
Новичок
Регистрация: 19.05.2010
Сообщений: 10
Провел на форуме:
76057

Репутация: 2
По умолчанию

Цитата:
Сообщение от rudvil  
2Grek мешать С++ с Си не хорошо
Код:
#include <iostream>
#include <locale>
#include <fstream>
#include <string>

struct user {
  std::string name;
  std::string nick;
  std::string email;
  int icq;
};

int main(int argc, char* argv[]) {
  std::setlocale(LC_ALL, "Russian");

  user userdata;

  std::cout << "Введите имя\n";
  std::cin >> userdata.name;

  std::cout << "Введите ник\n";
  std::cin >> userdata.nick;

  std::cout << "Введите Email\n";
  std::cin >> userdata.email;

  std::cout << "Введите icq\n";
  std::cin >> userdata.icq;

  std::ofstream file("C:\\user.txt");

  file << "name:" << userdata.name << "\n";
  file << "nick:" << userdata.nick << "\n";
  file << "email:" << userdata.email << "\n";
  file << "icq:" << userdata.icq;

  file.close();
  system("pause");
}
вот так точно будет работать.
учебники просто разные,сборная CCCP ))

Спасиб всем.Разобрался почуть.
 
Ответить с цитированием

  #5414  
Старый 14.06.2010, 03:13
Аватар для Ra$cal
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

Grek
ну и в довесок - не юзай using namespace std. если хочется упростить - делай

Код:
using std::cin;
using std::cout;
using std::string;
using std::ofstream;
юзанье всего неймспейса - моветон.
 
Ответить с цитированием

  #5415  
Старый 14.06.2010, 21:32
Аватар для qwert135
qwert135
Познающий
Регистрация: 22.11.2009
Сообщений: 53
Провел на форуме:
33126

Репутация: 0
По умолчанию

Цитата:
Сообщение от Ra$cal  
Grek
ну и в довесок - не юзай using namespace std. если хочется упростить - делай

Код:
using std::cin;
using std::cout;
using std::string;
using std::ofstream;
юзанье всего неймспейса - моветон.
Сори за глупый вопрос, но почему using namespace std нехорошо?
 
Ответить с цитированием

  #5416  
Старый 14.06.2010, 21:50
Аватар для Ra$cal
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

потому что могут перекрыться классы в неймспейсах, например будет класс string из stl, и класс string от стороннего поставщика с гораздо большим функционалом, например в неймспейсе megalib. Если заюзить неймспесы std и megalib будет конфликт. Так же если вы не заюзали стд, а заюзали megalib, то при использовании объявления string наверняка большинство будет думать о классе стринг из std. То же самое будет и с самим разработчиком через некоторое время. То есть теперь надо будет думать, а откуда этот класс взят. Ну и плюс все что объявлно в неймспейсе становится видимо глобально. Поэтому и не рекомендуют так делать.

И да, все юзинги писать надо в cpp файлах, а не в хидерах.
 
Ответить с цитированием

  #5417  
Старый 14.06.2010, 23:10
Аватар для qwert135
qwert135
Познающий
Регистрация: 22.11.2009
Сообщений: 53
Провел на форуме:
33126

Репутация: 0
По умолчанию

Все понятно.Спасибо.
 
Ответить с цитированием

  #5418  
Старый 17.06.2010, 12:52
Аватар для mailbrush
mailbrush
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме:
6075534

Репутация: 2731


Отправить сообщение для mailbrush с помощью ICQ
По умолчанию

Код:
recv(s, response, 1024, 0);
Этим кодом я получаю 1024 байта и записываю их в response.
Как получить абсолютно всю информацию, предварительно не зная сколько байтов, и записать все это в один массив символов?

Код:
do
{
 iResult = recv(s, response, 1024, 0);
}
while(iResult > 0);
Этим кодом получается вся информация, но проблема в том, что в response оказываются последние 1024 байта, что очевидно. Необходимо как-то создать буфер неизвестной длины, и в цикле делать конкатенацию буфера вместе с полученной инфой, но как?

Еще как вариант - создать динамический массив, и в цикле расширять его размер, опять вопрос - как?

Спасибо заранее.
 
Ответить с цитированием

  #5419  
Старый 17.06.2010, 13:08
Аватар для d_x
d_x
Reservists Of Antichat - Level 6
Регистрация: 25.03.2008
Сообщений: 670
Провел на форуме:
4137635

Репутация: 2407


По умолчанию

Код:
string answer;

while( (iResult = recv(s, response, 1024, 0)) > 0)
  answer.append(response, iResult);

//весь ответ в answer.c_str()
Если нуллбайты будут в ответе, то такой способ скорее всего не подойдет.

Последний раз редактировалось d_x; 17.06.2010 в 13:11..
 
Ответить с цитированием

  #5420  
Старый 17.06.2010, 13:33
Аватар для herfleisch
herfleisch
Участник форума
Регистрация: 07.01.2009
Сообщений: 237
Провел на форуме:
745649

Репутация: 97
Отправить сообщение для herfleisch с помощью ICQ
По умолчанию

Цитата:
Сообщение от mailbrush  
Код:
recv(s, response, 1024, 0);
Этим кодом я получаю 1024 байта и записываю их в response.
Как получить абсолютно всю информацию, предварительно не зная сколько байтов, и записать все это в один массив символов?

Код:
do
{
 iResult = recv(s, response, 1024, 0);
}
while(iResult > 0);
Этим кодом получается вся информация, но проблема в том, что в response оказываются последние 1024 байта, что очевидно. Необходимо как-то создать буфер неизвестной длины, и в цикле делать конкатенацию буфера вместе с полученной инфой, но как?

Еще как вариант - создать динамический массив, и в цикле расширять его размер, опять вопрос - как?

Спасибо заранее.
Храни строки в списке, а не в массиве. Например, принимаешь по 1024 символа.

Собственно список - это и есть какое-то подобие динамического массива.

Тогда кодишь так:
Код:
struct info
{
  info * next; // Указатель на след. элемент
  info * prev; // и на предыдущий
  char data[1024];
} node;

...

recv(s, node.data, 1024, 0);

/*
 В классе хранишь указатели на первую принятую строку. Далее раотаешь с объектом.
*/

...
Далее можно написать класс, реализующий линейный двусвязный список, нафигачить ему конструкторы копирования всякие, перегрузку выражений и т.д.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Часто задаваемые вопросы по MySQL Серый PHP, PERL, MySQL, JavaScript 5 28.12.2006 18:26
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости 4 07.07.2006 16:53
Вопросы по Ipb 2.0 Voodoo_People Форумы 26 15.02.2005 22:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ