c++ - 不能使用 cin 两次,cin.clear 和 cin.ignore 也不起作用

标签 c++ eof cin

我是 C++ 编程新手,遇到了障碍。这是我的代码:

#include <iostream>
using namespace std;

int main(){

    int sum = 0, a;
    cout << "enter first set of numbers:";
    while(cin >> a) sum += a;
    cout << "first sum = " << sum;
    cin.clear();
    cin.ignore( numeric_limits<streamsize>::max(), '\n');

    sum = 0;
    cout << "enter second set of numbers:";
    while(cin >> a) sum += a;
    cout << "second sum = " << sum;
}

我正在尝试对我在命令行输入的两组数字求和。问题是,当我按 ctrl-d 终止我的第一组数字时,它会跳过第二组 cin。我在 Internet 其他地方找到的大部分页面都告诉我使用 cin.clear 和 cin.ignore。我试过了,但还是不行。本页question concerning cin.clear()甚至似乎有同样的问题。但是,他们建议的修复方法对我不起作用。

上面的代码对其他人有用吗?

最佳答案

当您使用 Ctrl-D 时,您终止了输入流:没有更多的字符来自 std::cin。即使清除流也无济于事:您已经告诉流它已经结束了。你不能重新打开它。但是,clear()流并使用 ignore() 是您问题的解决方案!

您需要一个不同的指标来表明一组值已完成。最简单的方法是使用非数字字符或字符串:尝试读取不是 int 的内容将导致流进入故障模式 [无需关闭流]。也就是说,您一直阅读直到转换失败,clear() 流,ignore() 直到行尾的所有内容。

您的代码应该已经这样做了:不要使用 Ctrl-D,只需输入,例如 x

关于c++ - 不能使用 cin 两次,cin.clear 和 cin.ignore 也不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19968706/

相关文章:

c++ - 带菜单的输入验证 C++

python - 通过网络发送python ctypes结构

c++ - 在命名空间内定义函数还是限定函数?

Java - 过早的 EOF - 编写网络阅读器的更好方法?

由于来自 inputStream 的过早 EOF,Hadoop MapReduce 作业 I/O 异常

Linux - 检查文件末尾是否有空行

c++ - 在一行中输入多个字符串到一个 vector 中? (C++)

c++ - 如何使用附加库编译 Visual C++ 程序

c++ - 非 ASCII 字符 - 从 std::string 到 char* 的转换

c++ - std::cin.fail()问题