2Grek мешать С++ с Си не хорошо Code: #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"); } вот так точно будет работать.
Grek ну и в довесок - не юзай using namespace std. если хочется упростить - делай Code: using std::cin; using std::cout; using std::string; using std::ofstream; юзанье всего неймспейса - моветон.
потому что могут перекрыться классы в неймспейсах, например будет класс string из stl, и класс string от стороннего поставщика с гораздо большим функционалом, например в неймспейсе megalib. Если заюзить неймспесы std и megalib будет конфликт. Так же если вы не заюзали стд, а заюзали megalib, то при использовании объявления string наверняка большинство будет думать о классе стринг из std. То же самое будет и с самим разработчиком через некоторое время. То есть теперь надо будет думать, а откуда этот класс взят. Ну и плюс все что объявлно в неймспейсе становится видимо глобально. Поэтому и не рекомендуют так делать. И да, все юзинги писать надо в cpp файлах, а не в хидерах.
Code: recv(s, response, 1024, 0); Этим кодом я получаю 1024 байта и записываю их в response. Как получить абсолютно всю информацию, предварительно не зная сколько байтов, и записать все это в один массив символов? Code: do { iResult = recv(s, response, 1024, 0); } while(iResult > 0); Этим кодом получается вся информация, но проблема в том, что в response оказываются последние 1024 байта, что очевидно. Необходимо как-то создать буфер неизвестной длины, и в цикле делать конкатенацию буфера вместе с полученной инфой, но как? Еще как вариант - создать динамический массив, и в цикле расширять его размер, опять вопрос - как? Спасибо заранее.
Code: string answer; while( (iResult = recv(s, response, 1024, 0)) > 0) answer.append(response, iResult); //весь ответ в answer.c_str() Если нуллбайты будут в ответе, то такой способ скорее всего не подойдет.
Храни строки в списке, а не в массиве. Например, принимаешь по 1024 символа. Собственно список - это и есть какое-то подобие динамического массива. Тогда кодишь так: Code: struct info { info * next; // Указатель на след. элемент info * prev; // и на предыдущий char data[1024]; } node; ... recv(s, node.data, 1024, 0); /* В классе хранишь указатели на первую принятую строку. Далее раотаешь с объектом. */ ... Далее можно написать класс, реализующий линейный двусвязный список, нафигачить ему конструкторы копирования всякие, перегрузку выражений и т.д.
Посоветуйте какую нить приблуду для парсинга XML и ini. Желательно чтобы обвертки поменьше катать нужно было.
Code: #include <iostream> #include <cstdlib> using std::cout; using std::cin; using std::endl; int main() { setlocale(0, "Rus"); int option; do { cout << "1.Hello, World" << endl; cout << "2." << endl; cout << "3.Quit" << endl; cin >> option; switch (option) { case 1: cout << "Hello,World!" << endl; break; break; case 2: break; case 3: break; default : cout << "o_O"; continue; } } while (option != 3); return 0; } Code: case 1: cout << "Hello,World!" << endl; break; break; Вот этот участок. Можно как-то по элегантнее сделать? ЗЫ.Это онли пример
там смысла во втором брэйке нету. Без него элегантнее уже никак не сделать. Хотя можно вместо брейка вобще написать return 0; но это уже дело вкуса. Хотя нас учили, много ретернов в коде лучше не делать, так как их искать потом при дебаге сложно (.
да я уж знаю, что смысла нету. Если парень использует visual studio - то там таких глюков просто куча... Неудивительно, что он вставил второй брейк. Я на первом курсе университета тоже вставлял)))
Ну,например,есть переменная: int one = 1000; Как вывести,скажем, 2 член? Было бы это char, то cout << one[2];