我想创建一个简单的while循环,使用cin.ignore()仅在变量x为0、1、2或3时才中断循环。我需要脚本忽略所有其他内容,并提示用户再次输入x的值。
#include <iostream>
#include <limits>
using namespace std;
int main()
{
int x;
while(x < 0 || x > 3)
{
system("cls");
cout << "Please enter an x value: ";
cin >> x;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
cout << "x = " << x << endl;
return 0;
}
当前,此脚本会忽略负数和正数,但不会忽略char或字符串输入。如何也忽略字符和字符串输入? cin.ignore()似乎将x设置为0并在输入文本时中断。
研究
How to properly use cin.clear an cin.ignore 提供一些有关cin.fail()的有趣信息
Cin.Ignore() is not working 提供有关cin.get()和cin.sync()的一些有趣信息
这些文章涉及cin.ignore()的不同功能,似乎并没有解决完全错误的类型分配及其如何与cin.ignore()一起工作。因此,我假设分配无法将“ dadsa”分配给变量x,并且cin.ignore()消耗了“ dadsa”,从而使x等于0。输入文本时会产生无限循环。谢谢你们!