我想知道是否可以有多个 while (cin>>(variable))
如下代码所示:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v1, v2;
int input;
while (cin>>input)
v1.push_back(input);
while (cin>>input)
v2.push_back(input);
return 0;
}
我的程序的逻辑是让用户在两组 int vector 中定义元素的数量和每个元素的值。
但是,我意识到在为第一个 vector 输入第一组数字(以 EOF 结尾)后,我无法为第二个 vector 输入第二组数字,程序立即终止。我怀疑 EOF 意味着第一个 vector 的第一个 cin 也由第二个 vector 的第二个 cin 处理。
有没有办法让上面的程序正确运行,即有不止一个 while (cin)?
最佳答案
当您执行 while (cin>>input)
时,您实际上是在要求输入流 cin
生成整数,直到流变坏(即遇到 EOF ,Steam 无法将用户的输入转换为整数,或者可能存在其他问题)。
循环终止后,流的状态仍将处于导致它停止循环的任何状态。为了继续从 cin
读取直到遇到另一个 EOF token ,您需要首先清除 eof 失败位,这可以通过使用 cin.clear 来完成(正如 πìντα ῥεῖ 指出的那样) ()
。但是,您应该首先检查 cin
的状态,以防由于其他原因(可能用户输入的是单词而不是数字)导致输入失败。
两个选项可能是:检查是否只设置了 eof 位,或者您只能取消设置 eof 位:
if (cin.eof())
{
std::cout << "Yay, reached an EOF" << std::endl;
}
cin.clear(std::ios_base::eofbit);
关于c++ - 可能有多个 while (cin>>input),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39534406/