首页 > 解决方案 > C++ 中的 cin.ignore() 函数不适用于整个流

问题描述

我正在尝试安全地输入 1 到 25 之间的整数,但我被告知使用的代码无法正常工作。那是代码:

*int SafelyInputInteger(int lowerBound, int upperBound)
{
    int intNumber;
    do {
        cout<<"Input a number: "; cin>>intNumber;
        if(cin.fail())
        {
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(),'\n');
            continue;
        }
    } while((intNumber<lowerBound)||(intNumber>upperBound));
    return intNumber;
}
int main()
{
int height;
height=SafelyInputInteger(1,25);
cout<<"Height is: "<<height<<endl;
 return 0;
}*

我得到的错误如下:错误:'numeric_limits'未在此范围内声明错误:'>'标记之前的预期主表达式错误:没有匹配函数调用'max()'

标签: c++stream

解决方案


您提到的确切错误发生在使用 GCC 编译且不包括<limits>标头时。

<source>: In function 'int SafelyInputInteger(int, int)':
<source>:16:24: error: 'numeric_limits' was not declared in this scope
                 cin.ignore(numeric_limits<streamsize>::max(),'\n');

                        ^~~~~~~~~~~~~~
<source>:16:49: error: expected primary-expression before '>' token
                 cin.ignore(numeric_limits<streamsize>::max(),'\n');

                                                     ^
<source>:16:56: error: no matching function for call to 'max()'
                 cin.ignore(numeric_limits<streamsize>::max(),'\n');

在此处查看现场演示。使用的编译器版本:GCC 8.2
包含<limits>标头可解决此问题。


推荐阅读