检查输入是否为整数

Check if input is integer

本文关键字:整数 是否 输入 检查      更新时间:2023-10-16

为了学习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::stoistd::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";
        }
    }
}