检查输入值是整数类型

时间:2016-05-27 09:30:51

标签: c++

我创建了一个检查输入值的do-while循环(下面)。只允许输出这个循环的值是1和2.当我把双值ex。 1.2或4.5它隐式转换为整数(1和4值)。当我输入字符串值时,循环工作无穷大,我必须从头开始关闭控制台和调试。如何编写正确的循环来保护输入值不受double和string值的影响?

int triangle;
do{
        cout << "Put the number (1 or 2): ";
        cin >> triangle;
    } while (triangle > 2 || triangle < 1 || !cin);

4 个答案:

答案 0 :(得分:2)

int check()
{
    string s;
    cin >> s;
    if(s.length() == 1)
    {
        if((s[0] == '1') || (s[0] == '2'))
        {
            return s[0] - '0';
        }
    }
    return 0;
}
int main()
{
    int triangle;
    do
    {
        cout << "Put the number (1 or 2): ";
    }
    while (triangle = check());
    return 0;
}

答案 1 :(得分:1)

您可以通过以下方式检查

int triangle;
cin >> triangle;

if (cin.fail()) {
    //Not an int.
}

答案 2 :(得分:1)

1.初始化triangle会更好。

2.当std::basic_istream::operator>>提取失败时,将设置failbit。您应检查结果并致电std::basic_ios::clear以清除错误状态,并std::basic_istream::ignore跳过错误输入。

int triangle = 0;

for (;;) {
    cout << "Put the number (1 or 2): ";
    if (cin >> triangle) {
        if (triangle == 1 || triangle == 2) break;
    } else {
        cin.clear(); // reset stream state after failure
        cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // skip bad input
    }
}

答案 3 :(得分:-2)

scanf(“%d”,&amp; triangle)如果读取一个整数,则返回1。

所以你可以这样做(它也照顾EOF)

printf("Enter option (1 or 2)\n");
while(~scanf("%d", &n))
{
     if (n!=1 && n!=2)
           break;
     printf("Enter option (1 or 2)\n");
}