我写文件时遇到问题。如果我用空格写东西,它会将每个单词写成一行。为什么呢?
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();
}
由于 戴蒙
答案 0 :(得分:0)
考虑这样写:
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
here。
修改强>
要非常小心(实际上我建议只是避免它)将阅读与>>
和getline
混合在一起。如果您使用int
阅读,例如>>
,则会在行的末尾留下'\n'
字符,因此当您下次阅读getline
时,您会看到该行的 rest (基本上没什么),而不是您可能想要的,这是 next 行。
如果您刚刚使用>>
阅读并希望使用getline
,请先阅读空白食客,例如std::cin >> std::ws
。