如果我输入“Ctrl + Z”,它会崩溃,如何解决?

时间:2015-03-03 07:54:14

标签: c++ inputstream eof

    vector<string> svec;
    string str;
    while (cin >> str&&!cin.eof())
    {
        svec.push_back(str);
    }
    for (auto c:svec)
    {
        cout << c << " ";
    }

如果我输入tt tt tt,则输出为tt tt tt。 但如果我什么也没输入,我输入 Ctrl + Z (windows + vs2013)会崩溃。 所以我试着解决它。

 while (!cin.eof())
    {
        cin >> str;
        svec.push_back(str);
    }

现在,如果我什么也没输入,我输入 Ctrl + Z 不会崩溃。 但是如果我输入tt tt tt,则输出为tt tt tt tt

现在我不知道如何修复它。请帮帮我。

1 个答案:

答案 0 :(得分:1)

你应该尝试:

while (cin >> str)
{
    svec.push_back(str);
}

为什么要额外
如果我展开你的while循环,那就是:

1. buf [tt tt tt, not eof], vec []
  a. is eof no
  b. read and push str
2. buf [tt tt, not eof], vec [tt]
  a. is eof no
  b. read and push str
3. buf [tt, not eof], vec [tt tt]
  a. is eof no
  b. read and push str
4. buf [, not eof], vec [tt tt tt]
  a. is eof no
  b. read and push str [read fails, str contains old value and eof is set]
5. buf [eof], vec [tt tt tt tt]
  a. is eof yes
  b. break

您还可以阅读Why while(!feof(...) ) is almost always wrong