📜  处理错误的输入 cpp - C++ (1)

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

处理错误的输入

在编写程序时,我们经常要考虑到用户可能会输入一些不合法的数据,例如非法字符、超出范围的数值等等。为了保证程序的稳定性和正确性,我们需要对这些错误的输入进行处理。

本文将介绍在 C++ 中如何处理错误的输入。

读取输入

在 C++ 中,我们通常使用 cin 来读取用户的输入。例如,我们想要读取一个整数,可以使用以下代码:

int n;
cin >> n;

然而,如果用户输入了一个非法的字符,例如字母、符号等等,程序就会出现错误。为了避免这种情况,我们需要对输入进行判断和处理。

判断输入是否合法

在读取输入后,我们可以使用 cin.fail() 判断是否读取成功。如果读取成功,cin.fail() 将返回 false,否则将返回 true

例如,以下代码可以判断输入是否为整数:

// 读入一个整数
int n;
cin >> n;
if (cin.fail()) {
    // 输入不合法
    cout << "Invalid input" << endl;
    // 清空输入缓存
    cin.clear();
    // 忽略输入流中的所有字符,直到遇到换行符
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
}

在判断输入不合法时,我们需要清空输入缓存,并忽略输入流中的所有字符,直到遇到换行符。这样才能保证后续的读取操作不会受到前面错误的输入的影响。

处理超出范围的数值

除了非法字符,用户还可能输入超出范围的数值。例如,如果用户输入了一个超过 int 类型的范围的数值,程序就会出现错误。

为了处理超出范围的数值,我们可以使用 cin.ignore() 忽略输入流中的所有数字字符。例如,以下代码可以读取一个 int 类型的数值,并在输入超出范围时输出错误提示:

// 读入一个整数
int n;
cin >> n;
if (cin.fail()) {
    // 输入不合法
    cout << "Invalid input" << endl;
    // 清空输入缓存
    cin.clear();
    // 忽略输入流中的所有数字字符
    cin.ignore(numeric_limits<streamsize>::max(), ' ');
    // 忽略输入流中的所有字符,直到遇到换行符
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
} else {
    // 判断输入是否超出范围
    if (n < numeric_limits<int>::min() || n > numeric_limits<int>::max()) {
        // 输入超出范围
        cout << "Input out of range" << endl;
    }
}

注意,我们需要先忽略输入流中的所有数字字符,然后再忽略输入流中的所有字符,直到遇到换行符。这样才能保证后续的读取操作不会受到前面错误的输入的影响。

总结

处理错误的输入是编写稳定、安全程序的重要步骤。在 C++ 中,我们可以使用 cin.fail() 判断输入是否合法,使用 cin.clear() 清空输入缓存,使用 cin.ignore() 忽略输入流中的字符,从而保证程序的正确性和稳定性。