Как сделать пользовательский ввод цифр только в 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 в вашем массиве.