【问题标题】:C++ Input: Integers Only (ruling out non-integers)C++ 输入:仅整数(排除非整数)
【发布时间】:2014-07-19 13:53:07
【问题描述】:

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

在我正在编写的程序的某个时刻,我需要以正整数形式获取用户输入。当用户输入不同于整数(或负整数)的内容时,程序将响应“无效输入。”。当用户输入正确的整数时,它会继续做它必须做的事情(在这种情况下,它会“计算”输入)。这一切都很顺利,但是当用户输入时出现问题:

“1a”(数字与字符组合),它只会识别“1”;

“1 2”(数字空格数),它只会识别“1”;

“1,2”(数字逗号/点号),它只会识别“1”;

我想在所有情况下都得到“无效输入”。- 输出。

我将发布我的代码的简化版本,向您展示我到目前为止所获得的内容,并询问你们是否可以为我提供解决此问题的方法。

提前致谢!

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

【问题讨论】:

  • 如果你用cin whole line google,你可能会得到一些提示。这可能是 Stackoverflow 中的重复问题。
  • 可能不是重复的:在阅读了整行输入之后,问题仍然是如何最好地解析该行以确定它是否包含无关文本(这被归类为输入错误)。

标签: c++ input integer


【解决方案1】:

通过getline&lt;string&gt; 标头中读取一行输入。

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

解析该行,例如通过istringstream(或者像标准库一样,通过strtol)。

检查解析停止的位置。

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

【讨论】:

  • 问起来可能有点愚蠢,但你能解释一下我应该怎么做(用代码)吗?我的编程经验是有限的,我现在一无所获。我 100% 相信这是一个有用的答案,但我仍然不知道我的代码现在应该是什么样子。谢谢。
  • @BenGroeneveld:在 cppreference.com 的 documentation page 上有一个 getline 的用法示例。我相信剩下的大部分也只是钻研文档,或者谷歌搜索。对于修剪,您需要能够检查给定字符是否为空格,您可以通过isspace 来执行此操作。请记住将参数从char 转换为unsigned char,因为给它一个负值通常是未定义的行为。嗯,我想这就是全部,主要是。祝你好运! ;-)
猜你喜欢
  • 1970-01-01
  • 2014-04-21
  • 2020-06-21
  • 2015-06-21
  • 1970-01-01
  • 2013-01-08
  • 2012-11-02
  • 1970-01-01
  • 2013-04-23
相关资源
最近更新 更多