📜  c++ 检查 cin 是否没有得到 int - C++ (1)

📅  最后修改于: 2023-12-03 15:14:00.719000             🧑  作者: Mango

C++ 检查 cin 是否没有得到 int

在使用 C++ 中的 cin 读取输入时,有时会出现输入不正确的情况,比如输入了一个字符串而不是一个数值类型。在这种情况下,程序可能会出现意想不到的错误。

为了避免这种情况,可以使用一些方法来检查输入是否正确。下面介绍几种常用的方法:

方法一:使用 cin.fail()

cin.fail() 方法可以检查上次输入是否成功。如果输入失败,该方法将返回 true,否则返回 false。

#include <iostream>

using namespace std;

int main()
{
    int num;
    cout << "Please enter a number: ";
    cin >> num;

    if (cin.fail())
    {
        cout << "Invalid input!" << endl;
        cin.clear(); // 清空输入缓冲区
        cin.ignore(1024, '\n'); // 忽略一定数量的字符直到遇到回车符
        return 1;
    }

    cout << "The number you entered is " << num << endl;

    return 0;
}

这里使用 cin.fail() 方法来检查输入是否失败。如果失败,输出 "Invalid input!",并清空输入缓冲区和忽略一定数量的字符直到遇到回车符。

方法二:使用 cin.good()

类似于 cin.fail(),cin.good() 方法也可以检查上次输入是否成功。如果输入成功,该方法将返回 true,否则返回 false。

#include <iostream>

using namespace std;

int main()
{
    int num;
    cout << "Please enter a number: ";
    cin >> num;

    if (!cin.good())
    {
        cout << "Invalid input!" << endl;
        cin.clear(); // 清空输入缓冲区
        cin.ignore(1024, '\n'); // 忽略一定数量的字符直到遇到回车符
        return 1;
    }

    cout << "The number you entered is " << num << endl;

    return 0;
}

这里使用 !cin.good() 来检查输入是否成功。如果失败,输出 "Invalid input!",并清空输入缓冲区和忽略一定数量的字符直到遇到回车符。

方法三:使用后缀 ++

使用后缀 ++ 可以检查输入是否正确。在读取一个数值类型时,如果输入不正确,cin 将自动将状态置为错误状态,并返回一个非数值类型的值。如果使用后缀 ++,该值将自增,即变成一个非法的值。

#include <iostream>

using namespace std;

int main()
{
    int num;
    cout << "Please enter a number: ";
    cin >> num;

    if (cin >> num++)
    {
        cout << "The number you entered is " << num << endl;
    }
    else
    {
        cout << "Invalid input!" << endl;
        cin.clear(); // 清空输入缓冲区
        cin.ignore(1024, '\n'); // 忽略一定数量的字符直到遇到回车符
        return 1;
    }

    return 0;
}

这里使用 if (cin >> num++) 来检查输入是否正确。如果失败,输出 "Invalid input!",并清空输入缓冲区和忽略一定数量的字符直到遇到回车符。如果成功,输出输入的数值。

以上就是几种常用的检查方法。根据具体情况可以选择合适的方法。