0

我在写入文件时遇到问题。如果我用空格写一些东西,它会将每个单词写成一行。为什么?

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();
}

谢谢达蒙

4

1 回答 1

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在这里阅读。

编辑:

要非常小心(实际上我建议只是避免它)将阅读>>getline. 例如int,如果您阅读 ,>>会将'\n'字符留在行尾,因此当您下一次阅读 时getline,您会得到该行的其余部分(基本上什么都没有),而不是您可能想要的,是下一行。

如果您刚刚阅读>>并想使用getline,请先阅读空白食者,就像这样std::cin >> std::ws

于 2013-10-11T08:12:23.487 回答