检查输入是否为整数

时间:2016-02-09 18:08:16

标签: python c++ cin

为了学习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()但我找不到任何官方文件,我也没有真正了解它是如何工作的。

那么,如何检查输入是否为整数?

更一般来说,我如何检查输入是否是&#34; 任何&#34;?

2 个答案:

答案 0 :(得分:4)

对于这种情况,您可能希望将输入作为字符串读取,然后检查字符串(例如,&#34;仅包含数字,最多包含N位数字&#34;) 。当且仅当它通过检查时,解析出int

也可以将检查和转换结合起来 - 例如,Boost lexical_cast<int>(your_string)将尝试解析字符串中的int,如果无法转换则抛出异常整个事情都是一个int。

答案 1 :(得分:2)

如果使用C ++ 11的std::stoi结合std::getline来读取整行输入,那么Python可以更直接地编译代码。这比使用标准I / O错误处理要容易得多,标准I / O错误处理可能没有用户友好的界面。

如果输入无法正确解析为整数,则

std::stoi抛出std::invalid_argument;如果数字太小或太大而无法放入std::out_of_range,则int抛出#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"; } } } }。

#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";
        }
    }
}

如果你想使代码更类似于它的Python等价物,那么你可以将输入封装在一个函数中:

<div class="col-sm-4 form-group">
  <input id="lastNameAdd" name="lastName" data-bind="value: lastName" title="" data-role="validate" data-content="Last name is required." class="form-control" required="" placeholder="last name" data-original-title="last name" aria-describedby="popover270602">
  <div class="popover auto fade top in" role="tooltip" id="popover270602" style="top: -74px; left: 400.688px; display: block;">
    <div class="arrow" style="left: -323.806%;"></div>
    <h3 class="popover-title">last name</h3>
    <div class="popover-content">Last name is required.</div>
  </div>
</div>