Как разрешить только положительный целочисленный ввод от пользователя? - PullRequest
0 голосов
/ 02 ноября 2018

Я пытался разрешить только положительный целочисленный ввод в мою программу. Но работает, он проходит через ввод символов и отрицательные целые числа , десятичные числа . Есть идеи как это исправить?

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

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Это то, что вы, вероятно, хотите ( демо ):

#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;
}
0 голосов
/ 02 ноября 2018

Я пытался разрешить только положительный целочисленный ввод в мой программа.

Вы можете легко проверить это с помощью std :: isdigit , если вы взяли пользовательский ввод в виде строки вместо целого числа .

  1. принять пользовательский ввод в виде строки .
  2. для каждого символа в строке, проверьте, является ли это цифрой (используя std::isdigit).
  3. если какой-либо из символов в пользовательском вводе (который является строкой) не является допустимой цифрой, вернуть логическое значение = false .
  4. если оно истинно для всех символов, input является целым числом, и вы можете преобразовать его обратно в целое число, используя std :: to_string .

Ниже приведен пример кода: СМОТРИТЕ ЖИТЬ

#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!
...