Как сделать пользовательский ввод цифр только в C++?

Пока это мой код:

while(bet > remaining_money || bet < 100)
    {
        cout << "You may not bet lower than 100 or more than your current money. Characters are not accepted." << endl;
        cout << "Please bet again: ";
        cin >> bet;
    }

Это работает нормально, но я пытаюсь выяснить, как сделать это зацикливанием, если пользователь вводит что-либо, кроме числа.

Когда я нажимаю букву или говорю символ / знак, код просто ломается.

3 ответа

Используя функцию

isdigit() 

Эта функция возвращает true, если аргумент является десятичной цифрой (0–9)

Не забудь

#include <cctype>

Я хотел бы использовать std::getline а также std::string читать всю строку и затем выходить из цикла только тогда, когда вы можете преобразовать всю строку в двойную.

#include <string>
#include <sstream>

int main()
{
    std::string line;
    double d;
    while (std::getline(std::cin, line))
    {
        std::stringstream ss(line);
        if (ss >> d)
        {
            if (ss.eof())
            {   // Success
                break;
            }
        }
        std::cout << "Error!" << std::endl;
    }
    std::cout << "Finally: " << d << std::endl;
}

Хороший способ сделать это — принять ввод в виде строки. Теперь найдите длину строки как:

      int length = str.length(); 

Не забудьте указать string и cctype . Теперь запустите цикл, который проверяет всю строку и определяет, есть ли в ней символ, не являющийся цифрой.

      bool isInt = true; 
for (int i = 0; i < length; i++) {
        if(!isdigit(str[i]))
        isInt = false; 
    }

Если какой-либо символ не является цифрой, isInt будет ложным. Теперь, если ваш ввод (строка) состоит из цифр, преобразуйте его обратно в целое число как:

      int integerForm = stoi(str); 

Сохраните integerForm в вашем массиве.

Другие вопросы по тегам