📅  最后修改于: 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()
忽略输入流中的字符,从而保证程序的正确性和稳定性。