如何只允许用户输入正整数?

How to allow only positive integer input from user?

提问人:Eddie Rukmanis 提问时间:11/3/2018 最后编辑:JeJoEddie Rukmanis 更新时间:11/3/2018 访问量:3514

问:

我一直在尝试只允许正整数输入到我的程序中。但是它的工作是字符输入和负整数十进制数。有什么想法可以解决这个问题吗?

#include <iostream>
using namespace std;

int main()
{
    int row, col, i, i1, j, test;
    double n;
    test = 0;

    while (test == 0) 
    {
        cout << "Enter the number of rows: " << endl;
        cin >> row;
        if (cin.fail() || row <= 0 || !(row == (int)row)) 
        {
            cout << "\nEntered value is wrong!";
            printf("\n");
            cin.clear();
            cin.ignore();
            test = 0;
        }
        else {  test = 1;  }
    }
}
C++ 输入 IOSTREAM

评论

2赞 11/3/2018
发布一些可编译的代码。
1赞 Mark Ransom 11/3/2018
>>在第一个无效字符处停止。您需要检查该字符以了解它是否是输入的正确结尾。
3赞 πάντα ῥεῖ 11/3/2018
!(row==(int)row)是完全无用和多余的。
0赞 Hans Tananda 11/3/2018
其他提示:put 而不是 Also,尝试使用其中之一或,而不是两者。cout << "\nEntered value is wrong!\n";cout << "\nEntered value is wrong!";printf("\n");endl\n
0赞 Jesper Juhl 11/3/2018
“”的意义何在?else{ parbaude =1; }

答:

1赞 JeJo 11/3/2018 #1

我一直在尝试只允许正整数输入到我的 程序。

如果您将用户输入作为字符串而不是整数,则可以在 std::isdigit 的帮助下轻松检查它。

  1. 将用户输入作为字符串
  2. 对于字符串中的每个字符,检查它是否为数字(使用 )。std::isdigit
  3. 如果用户输入(字符串)中的任何字符不是有效数字,则返回 Boolean = false
  4. 如果所有字符都为 true,则输入为整数,您可以使用 std::to_string 将其转换回整数。

示例代码如下:SEE LIVE

#include <iostream>
#include <cctype> // std::isdigit
#include <string>
#include <vector>

bool isInteger(const std::string& input)
{
    for (const char eachChar : input)
        if (!std::isdigit(eachChar))
            return false;  // if not a digit, return  False
    return true; 
}

int main()
{
    std::vector<std::string> inputs{ "123", "-54", "8.5", "45w" }; // some inputs as strings
    for(const std::string& input: inputs)
    {
        if (isInteger(input))
        {
            // apply std::stoi(input) to convert string input to integer
            std::cout << "Input is a valid integer: " << input << std::endl;
        }
        else {  std::cout << input << " is not a valid integer!\n"; }
    }
}

输出

Input is a valid integer: 123
-54 is not a valid integer!
8.5 is not a valid integer!
45w is not a valid integer!
0赞 zdf 11/3/2018 #2

这是您可能想要的(演示):

#include <iostream>
#include <limits>

int main()
{
  using namespace std;

  int n;
  while ( !( cin >> n ) || n < 0 )
  {
    cin.clear();
    cin.ignore( numeric_limits<std::streamsize>::max(), '\n' );
  }

  //...

  return 0;
}