我必须循环来收集输入,第一个收集输入到双打矢量...
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()
然而,这发生在我的输出被丢弃的第二个循环中。我如何能够以他们需要的方式工作?
答案 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
,其他所有值都将被忽略。也就是说,您可能希望更加小心地忽略字符,例如,清除输入并继续尝试阅读double
和int
以及clear()
,直到成功为止:
ignore()