检查输入是否为整数
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;
}
我看了一下 try-catch,它看起来很简单。我关心的是如何检查输入是一个整数。我阅读了有关 cin.fail() 的内容,但我找不到任何官方文档,也没有真正了解它是如何工作的。
那么,如何检查输入是否为整数?
更一般地说,我如何检查输入是否为“anything”?
对于这种情况,您可能希望将输入作为字符串读取,然后检查该字符串(例如,"contains only digits, up to a maximum of N digits")。当且仅当它通过检查时,从中解析出一个 int
。
也可以将检查和转换结合起来——例如,Boost lexical_cast<int>(your_string)
将尝试从字符串中解析出一个 int,如果不能将整个字符串转换为一个整数。
如果您使用 C++11 的 std::stoi
结合 std::getline
读取整行输入,您的 Python 可以更直接地翻译代码。这比使用标准 I/O 错误处理要容易得多,后者可能没有非常用户友好的界面。
std::stoi
如果无法将输入正确解析为整数,则抛出 std::invalid_argument
,如果数字太小或太大而无法放入 [=],则抛出 std::out_of_range
17=].
#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++,我正在翻译我在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;
}
我看了一下 try-catch,它看起来很简单。我关心的是如何检查输入是一个整数。我阅读了有关 cin.fail() 的内容,但我找不到任何官方文档,也没有真正了解它是如何工作的。
那么,如何检查输入是否为整数?
更一般地说,我如何检查输入是否为“anything”?
对于这种情况,您可能希望将输入作为字符串读取,然后检查该字符串(例如,"contains only digits, up to a maximum of N digits")。当且仅当它通过检查时,从中解析出一个 int
。
也可以将检查和转换结合起来——例如,Boost lexical_cast<int>(your_string)
将尝试从字符串中解析出一个 int,如果不能将整个字符串转换为一个整数。
如果您使用 C++11 的 std::stoi
结合 std::getline
读取整行输入,您的 Python 可以更直接地翻译代码。这比使用标准 I/O 错误处理要容易得多,后者可能没有非常用户友好的界面。
std::stoi
如果无法将输入正确解析为整数,则抛出 std::invalid_argument
,如果数字太小或太大而无法放入 [=],则抛出 std::out_of_range
17=].
#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";
}
}
}