【问题标题】:C++ - After running while loop with cin, the program won't take input againC++ - 使用 cin 运行 while 循环后,程序将不再接受输入
【发布时间】:2016-04-26 23:38:35
【问题描述】:

我正在运行一个 while 循环,它将获取用户输入的浮点数并将它们添加在一起,直到输入中放入其他内容。

while(cin >> input)
{
    price += input;
    cout << "Next price: ";
}

之后,我让用户输入他们支付了多少钱:

cout << "Enter the amount paid: ";
cin >> paid;
cout << "You paid: " << paid << endl;

运行程序时,循环执行良好,我可以正确地将其传递到cout 总价,但它跳过了cin &gt;&gt; paid; 行并输出为You paid: nan

我尝试将cin.clear() 放在循环和下一个输入之间,但运行后,输出为:You paid: 0

我是否需要更改我的 while 循环或使用其他版本来清除输入?我对 C++ 很陌生。谢谢!

【问题讨论】:

  • 我发现该代码存在许多问题。看看这篇关于如何在类型安全的同时从 cin 获取数据的文章:cplusplus.com/forum/articles/6046
  • 看看getline(..)
  • 用户输入的“其他东西”仍在输入缓冲区中等待。您必须在读取另一个号码之前将其删除,例如 paid

标签: c++ loops while-loop cin


【解决方案1】:

当您使用cin.clear() 时,它会重置错误标志。但是,流中的数据仍然存在。在尝试阅读 paid 之前,您需要忽略该行的其余部分。

cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

确保添加#include &lt;limits&gt; 以使用std::numeric_limits

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-09
    • 2020-09-12
    • 2019-08-11
    • 2017-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    相关资源
    最近更新 更多