Проверка ввода C ++ для числового ввода

Я создаю свою очень простую программу, которая позволяет пользователю вводить числовые значения. На данный момент код работает просто отлично, но мне нужна проверка, если оператор else. Это то, что у меня есть на данный момент;

#include <iostream>
#include <string>

using namespace std;

int main()
{

unsigned __int64 input = 0;
char str[] = "qwertyuiopasdfghjklzxcvbnm[]{};'#:@~,./<>?|!£$%^&*()";

cout << "Insert a number" << endl;
cin >> input;

if (input % 2 == 0)
{
cout << "Even!" << endl;
}
else
{
if (input% 2 == 1)
{
cout << "Odd" << endl;
cout << "Lets make it even shall we? " << "Your new number is... " << input + 1 << endl;
}
else if (isdigit(str[0]))
{
cout << "That isn't a number!" << endl;
}
}

system("pause");
return 0;

}

Проблема, с которой я столкнулся, заключается в том, что если пользователь вводит что-то, что не является числом, возвращаемое им значение равно «Четное».

Я надеюсь, что вы, ребята, можете помочь!
Джон

0

Решение

Не использовать извлечение токена (>>) для первичного разбора. После сбоя извлечения ваш первичный ввод остается в неопределенном состоянии, что ужасно. Вместо этого читайте входные данные построчно, а затем обрабатывайте каждую строку.

Также, никогда игнорировать результат операции ввода. Это просто ошибка.

Итак, собрав все это вместе, вот как вы могли бы справиться с этим:

#include <iostream>
#include <sstream>
#include <string>

int main()
{
for (std::string line; std::cout << "Input: " && std::getline(std::cin, line); )
{
std::cout << "We're parsing your line '" << line << "'\n";

int n;
std::istringstream iss(line);

if (iss >> n >> std::ws && iss.get() == EOF)
{
std::cout << "It was a number: " << n << "\n";
}
else if (line.empty())
{
std::cout << "You didn't say anything!\n";
}
else
{
std::cout << "We could not parse '" << line << "' as a number.\n";
}
}

std::cout << "Goodbye!\n";
}

Обратите внимание, что все операции ввода (а именно >> а также getline) появляются в непосредственном логическом контексте!

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector