У меня проблема с записью в файл. Если я пишу что-то с пробелами, он записывает каждое слово как одну строку. Зачем?
void backstart()
{
thread t1(backing);
thread t2(thr2);
t1.join();
t2.join();
}
void thr2()
{
string tmp;
tmp = "";
while (tmp != "/exit")
{
cin >> tmp;
if (tmp != "/exit")
{
writefile(tmp);
}
}
runing = false;
}
void writefile(string msg)
{
ofstream myfile("file.txt", ios::out | ios::app);
myfile << userna + ": " + msg + ",\n";
myfile.close();
}
Благодаря Damon
Подумайте о том, как писать:
void thr2()
{
std::string line;
while(std::getline(cin, line)) // this check the read succeeded as well
{
if (line=="/exit") break; // stop on "/exit" command
writefile(line); // write out the line
}
running = false; // stop the thread, I guess
}
Важнейшей линией является
while(std::getline(std::cin, line))
который считывает всю строку в то время в std::string
называется line
, а затем проверяет состояние потока, чтобы убедиться, что чтение удалось. Читайте о std::getline
здесь.
Редактировать:
Будьте очень осторожны (и на самом деле я предлагаю просто избегать этого), смешивая чтение с помощью >>
и getline
. Если вы читаете, например, int
, с помощью >>
он оставит символ '\n'
в конце строки, поэтому, когда вы читаете следующий getline
с помощью getline
, вы получите остальную часть строки (в основном это ничего), а не то, что вы, вероятно, хотели, это следующая строка.
Если вы только что прочитали с помощью >>
и хотите использовать getline
, сначала прочитайте веб-прошивку, как этот std::cin >> std::ws
.