用空格在文件中写字符串

时间:2013-10-11 08:03:51

标签: c++ input line space fstream

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

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

由于 戴蒙

1 个答案:

答案 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