我想知道是否可以有多个 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向量中定义元素的数量和每个元素的值 .
但是,我意识到在输入第一个向量的第一组数字(以EOF结尾)后,我无法输入第二个向量的第二组数字,程序会立即终止 . 我怀疑EOF意味着第一个向量的第一个cin也被第二个cin处理为第二个向量 .
上面的程序是否有任何方法可以正常运行,即有多个while(cin)?
3 回答
当你执行
while (cin>>input)
时,你实际上要求输入流cin
生成整数,直到流变坏(即遇到EOF,蒸汽无法将用户的输入转换为整数,或者可能还有另一个问题) .循环终止后,流的状态仍将处于导致其停止循环的任何状态 . 为了继续读取
cin
直到遇到另一个EOF令牌,你需要首先清除eof失败位,这可以通过使用cin.clear()
完成(如πάνταῥεῖ指出) . 但是,如果输入由于其他原因(可能是用户输入的是单词而不是数字),则应首先检查cin
的状态 .两个选项可能是:检查是否只设置了eof位,或者只能取消设置eof位:
在使用EOF(即CTRL-D或CTRL-Z)结束后,您需要调用cin.clear();,以便再次重复使用它 .
此while循环读取,直到到达文件末尾 . 结束后没有更多内容,因此任何进一步的阅读都将失败 .
您必须设计另一种方式,以便您的程序在第一组数字完成时知道(即有条件) .
通常有两种选择:
但是,您也可以先将整行读作字符串并进行测试,例如,如果字符串为空 . 如果是,则输入值
v2
而不是v1
. 输入不为空,转换为int并推送到当前向量 .