C ++输入:仅整数(排除非整数)

时间:2014-05-29 22:07:47

标签: c++ input integer

我一直在搜索(在互联网上,书本上,任何地方)解决我的问题一段时间,我似乎无法找到它。我认为有很多关于这个主题的帖子,我只是找不到我认为合适的帖子,我想我永远不会,所以我会自己去问。

在我写作的程序中的某个点,我需要获得用户输入,作为正整数。当用户输入不同于整数(或负整数)的内容时,程序将以"无效输入进行响应。"。当用户输入正确的整数时,它将继续执行它必须做的事情(在这种情况下,它将输入' cout'输入)。这一切都很顺利,但是当用户键入时出现问题:

" 1A" (一个与一个字符组合的数字),它只会识别" 1";

" 1 2" (号码空间号码),它只会识别" 1";

" 1,2" (数字逗号/点号),它只能识别" 1&#34 ;;

我希望得到"输入无效。" -output在所有情况下。

我会发布我的代码的简化版本,向您展示我到目前为止所做的工作,并问您是否可以为我提供解决方案。

提前致谢!

#include <iostream>

using namespace std;

int main()
{
    int input;

    cout << "Enter a number higher than 0: ";
    cin >> input;

    while (cin.fail() || input < 1)
    {
        cout << "Invalid input.\nPlease enter a (positive integer) number higher than 0: ";
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        cin >> input;
    }
    cout << "Your input is: " << input << endl;
    return 0;
}

1 个答案:

答案 0 :(得分:3)

通过getline标题中的<string>读取一行输入。

修剪该行,即删除初始和尾随空格。

解析那条线,例如通过istringstream(或标准库,通过strtol)。

检查解析停止的位置。

如果解析成功消耗了整个字符串,那么你就有了很好的输入。