c++ - 如果我输入 "Ctrl+Z",它会崩溃,如何解决?

标签 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

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

最佳答案

你应该尝试:

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

为什么要加 tt
如果我展开你的 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

关于c++ - 如果我输入 "Ctrl+Z",它会崩溃,如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28826655/

相关文章:

java - 特殊的 OutputStream 根据输入数据量进入内存和文件

java - InputStream、InputStreamReader 和 BufferedReader 如何在 Java 中协同工作?

PHP 在 <<<EOF 字符串中使用 Gettext

c - 在 Windows 7 上遇到 EOF 问题

C++ 指针数组 - 初始化和访问对象

c++ - Qt 代码问题一般可能与 C++ 有关

c++ - win32 应用程序是否只有一个消息循环?还是每个窗口一个消息循环?

c++ - 函数定义还是变量定义?

java - HttpUrlConnection 在 connect() 上获取响应主体

c - 在 C 中使用 EOF 和 getchar() 进行字符计数