使用连续的cin>>输入循环

时间:2014-11-05 05:17:30

标签: c++

我必须循环来收集输入,第一个收集输入到双打矢量...

double input; 
while (cin >> input)
{
    list.push_back(input);  
}

并且第二个收集输入到一个向量的向量...

int input; 
while (cin >> input)
{
    list.push_back(input);  
}

第二个循环保持自动退出,所以我添加了以下两行......

cin.clear();
cin.ignore(INT_MAX,'\n');  // I've also tried cin.ignore()

然而,这发生在我的输出被丢弃的第二个循环中。我如何能够以他们需要的方式工作?

1 个答案:

答案 0 :(得分:2)

第一个循环读取,直到流变坏为止,因为没有任何double要读取。当流变坏时,除非你做某事,例如使用std::cin.clear()清除状态标志,否则它将不会再次变好。

当然,只是清除状态标志不会有太大的区别,因为它会读取所有可行的数字:有效double的格式是有效{{1}格式的超集。 s(好吧,好吧,除非他们使用的是16)。也就是说,你需要某种分隔符,可能是非空格的非数字字符。您对int的使用应跳过分隔符并跳到下一个换行符(尽管神奇值不是ignore()而是INT_MAX)。

目前还不清楚你想要输入什么,但是如果你使用

之类的东西
std::numeric_limits<std::streamsize>::max()

前三个值将被读为1 2 3 exit 4 5 6 ,其他所有值都将被忽略。也就是说,您可能希望更加小心地忽略字符,例如,清除输入并继续尝试阅读doubleint以及clear(),直到成功为止:

ignore()