C++ 带输入的无限循环

标签 c++ loops while-loop infinite-loop

<分区>

我有一个从终端获取输入的 C++ 程序,由于某种原因,这会产生无限循环:

double getSideLength()
{
    cout << "Enter a side: "
double side;
cin >> side; cin.ignore( 80, '\n' );
while (side <= 0){
    cout << "Please enter a valid side. Try again: ";
    cin >> side; cin.ignore(80, '\n');
}
return side;

这会产生输出:

Enter a side: invalid
Please enter a valid side. Try again:
Please enter a valid side. Try again:
Please enter a valid side. Try again:
   .... and so on. "invalid" is the only input the user made

最佳答案

operator>> documentation 中所述如果“获得的输入无法解释为适当类型的元素”,流将获得其故障位。如果您输入错误的号码,就会发生这种情况。所以你只需要在下一次输入之前 clear() cin 。这是代码:

double getSideLength()
{
        double side;
        cout << "Enter a side: ";
        cin >> side;
        if (!cin)
             cin.clear();
        cin.ignore( 80, '\n' );
        while (side <= 0){
                cout << "Please enter a valid side. Try again: ";
                cin >> side;
                if (!cin)
                    cin.clear();
                cin.ignore( 80, '\n' );
        }
        return side;
}

关于C++ 带输入的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9289327/

相关文章:

java : why is it safe to modify a map's entry's value while we are iterating over it?

c# - 当某些情况发生时,如何在 while 循环中保持变量常量的随机值?

c++ - 在 while 循环中将线程置于另一个线程中

c - while循环和算术运算符

c++ - Gdiplus::Bitmap::FromHBITMAP 内存泄漏

C++ 查找连接组件的数量(BFS,邻接矩阵)

c++ - 如何将单个char转换为int

c - 多个命令行参数 - 替换单词

javascript - 使用 jquery 遍历列表

c++ - 如何在数组中添加一个空格