检查输入是否为整数
Check if input is integer
为了学习C++,我正在翻译一个我用Python编写的程序。
我写了这个
n = 0
while n < 2:
try:
n = int(raw_input('Please insert an integer bigger than 1: '))
except ValueError:
print 'ERROR!'
为了从用户那里获得大于 1 的整数。
这是我目前在C++写的:
int n = 0;
while (n < 2) {
cout << "Please insert an integer bigger than 1: ";
cin >> n;
}
我看了一下尝试捕获,它似乎很简单。我关心的是如何检查输入是整数。我读过关于cin.fail()的信息,但我找不到任何官方文档,我也没有真正了解它是如何工作的。
那么,如何检查输入是否为整数?
更一般地说,如何检查输入是否为"任何东西"?
对于这种情况,您可能希望将输入读取为字符串,然后检查字符串(例如,"仅包含数字,最多 N 位数字")。当且仅当它通过检查时,从中解析出一个int
。
也可以将检查和转换结合起来 - 例如,Boost lexical_cast<int>(your_string)
将尝试从字符串中解析一个int,如果它无法将整个东西转换为int,则会抛出异常。
如果你使用 C++11 的std::stoi
与std::getline
结合使用来读取一整行输入,你的 Python 可以更直接地翻译。这比努力处理标准I/O错误处理要容易得多,标准I/O错误处理可以说没有非常用户友好的界面。
如果输入无法正确解析为整数,则std::stoi
抛出std::invalid_argument
,如果数字太小或太大而无法放入int
,则会std::out_of_range
抛出
#include <iostream>
#include <string>
int main() {
int n = 0;
while (n < 2) {
std::cout << "Please insert an integer bigger than 1: ";
std::string input;
std::getline(std::cin, input);
try {
n = std::stoi(input);
} catch (std::exception const&) {
std::cerr << "ERROR!n";
}
}
}
如果你想使代码更类似于它的Python等效项,那么你可以将输入封装在一个函数中:
#include <iostream>
#include <string>
int raw_input(std::string const& message)
{
std::cout << message;
std::string input;
std::getline(std::cin, input);
return std::stoi(input);
}
int main() {
int n = 0;
while (n < 2) {
try {
n = raw_input("Please insert an integer bigger than 1: ");
} catch (std::exception const&) {
std::cout << "ERROR!n";
}
}
}
相关文章:
- 验证用户输入和整数是否C++
- 找出堆栈数组中的下一个整数是否相同
- 检查整数是否增加了C++
- 检查用户输入的整数是否包含所有 1 或 0?
- 如何检查整数是否包含数字 0 和 1
- 测试整数是否在范围内时,逻辑错误和不正确输出
- 如何检查整数是否发生过或在读取C 的输入文件时发生了字符
- 使用非 32 位整数是否合理
- 将整数除法到整数是否需要强制转换以浮点数或双精度以更精确
- 检查整数是否是 8 的倍数
- 一种程序,用户在其中输入一个整数,程序指示该整数是否为素数
- 将常量字符数组转换为标头中的整数是否始终安全
- 检查整数是否具有整数立方根
- 如何确定整数是否适合变量
- 检查无符号整数是否没有索引的最佳实践
- C++查找整数是否存在于矩阵的一列中
- 确定一个整数是否与另一个几乎相等
- 检查正整数是否为2的幂的最短方法
- 用于检查整数是否包含给定十六进制模式的c++代码
- 如何在不使用平方根的情况下检查一个整数是否是完全平方数