首页 > 解决方案 > 在循环中获取坐标的函数在输入 char 值后变为无穷大

问题描述

我对从用户获取坐标的函数有疑问,该坐标等于或大于 0 且小于某个值 M(M,x,y 是整数)。当我只输入 itegers 时,一切都很好,但是当我输入两个或一个字符时,我的循环进入无穷大,而无需再次输入这些坐标。

我的代码:

 do {
        cout << "\t" << "Give coordinates in following format: X Y." << endl;
        cout << "\t";
        cin >> y >> x;
    } while (x < 0 || x > M || y < 0 || y > M);

标签: c++loopsinfinite-loop

解决方案


std::cin有一些被称为“失败”状态的东西。如果您尝试输入预期类型的​​值以外的值,std::cin将进入所述失败状态,并且将不再接收输入,因此它不会等待您为其提供值。

您可以检查它是否已进入失败状态:cin.fail(),如果它已进入失败状态,则返回True

您可以使用 清除失败状态cin.clear()


推荐阅读