C++ 检查整数。

标签 c++ cin

C++ 新手。在处理错误时出现正确循环的问题。我正在尝试检查用户输入是否为整数且为正数。

do{
    cout << "Please enter an integer.";
    cin >> n;

    if (cin.good())
    {
        if (n < 0) {cout << "Negative.";}
        else {cout << "Positive.";}
    }
    else
    {
        cout << "Not an integer.";
        cin.clear();
        cin.ignore();
    }
}while (!cin.good() || n < 0);

cout << "\ndone.";

当输入非整数时,循环中断。我觉得我误解了 cin.clear()cin.ignore() 的固有用法以及 cin 在这个循环中的状态.如果我删除 cin.ignore(),循环将变为无限循环。为什么是这样?我该怎么做才能使它成为一个功能优雅的循环?谢谢。

最佳答案

在您的非整数分支中,您将进一步调用 cin 方法,以便 cin.good() 重置为 true。

您可以将代码更改为如下内容:

while(1) { // <<< loop "forever"
    cout << "Please enter an integer.";
    cin >> n;

    if (cin.good())
    {
        if (n < 0) {cout << "Negative.";}
        else { cout << "Positive."; break; }
    }                            // ^^^^^ break out of loop only if valid +ve integer
    else
    {
        cout << "Not an integer.";
        cin.clear();
        cin.ignore(INT_MAX, '\n'); // NB: preferred method for flushing cin
    }
}

cout << "\ndone.";

或者您可以像这样进一步简化它:

while (!(cin >> n) || n < 0) // <<< note use of "short circuit" logical operation here
{
    cout << "Bad input - try again: ";
    cin.clear();
    cin.ignore(INT_MAX, '\n'); // NB: preferred method for flushing cin
}

cout << "\ndone.";

关于C++ 检查整数。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18567483/

相关文章:

c++ - pragma once inside 和 outside 之间的区别包括守卫?

c++ - 错误|一元 '*' 的类型参数无效(有 'int' ) -

c++ - istream_iterator 在读取字符时忽略 EOF (Ctrl+D)

c++ - std::cin while 循环给出了一个奇怪的结果

C++ 将来自 std::cin 的字符串与来自外部 txt 文件的字符串进行比较

c++ - 进入系统,Linux下的CRTL功能与Eclipse

c++ - 将整数转换为位表示

C++ 函数返回指向结构的指针变得奇怪

C++ 检查 cin 的输入是否有正确的数据

c++ - 使用 cin 在一行上读取多个 int