2013-07-26 2 views
1

Как я могу ограничить пользователя ввода реальных чисел только в программе на C++?Ограничить пользователя, чтобы ввести реальный номер только в C++

Пример:

двойное число; cin >> номер;

и он не будет принимать входные данные, как: «12add», «ABCD» и т.д. ...

может кто-то ведет меня к этому? используя значение bool. Спасибо!

ответ

0

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

0

Вы можете получить свои данные как std::string, а затем использовать одну из стандартных функций преобразования строк, чтобы узнать, соответствует ли ваш контент вашим ожиданиям.

0

Вот несколько псевдокодов;

double num; 

while(num != realNum) //check input is valid 
{ 
    cin >> num; 
} 
.... 
+2

sudo = "** S ** uper ** U ** ser ** DO **" (или возможно "** S ** ubstitute ** U ** ser ** DO **". Pseudo = " не настоящие". – BoBTFish

0

Вы не можете ограничить, какие типы пользователей на клавиатуре. Вы можете принять его как std::string и использовать boost::lexical_cast, чтобы преобразовать его в ожидаемый тип номера и уловить и обработать исключение boost::bad_lexical_cast.

2

Вы не можете заставить пользователя вводить правильный ввод. Но вы можете попросить их дать другой ввод, если предыдущий был недействителен. Для этого существуют разные процедуры. Одним из них является следующее:

  1. Используйте getline для чтения строки
  2. Разбор и понять линию
  3. Если строка недействительна, дают ошибку пользователя и перейти к 1

Это хорошо и довольно часто. Однако он использует динамическую память. Другой вариант:

  1. Используйте cin >> value;, как вы обычно делаете
  2. Проверьте cin.fail(), чтобы увидеть, если вход был правильно прочитать (проверьте cin.eof() также)
  3. Если не удалось, игнорировать все входные данные до пробельных:

    char c; 
    while (cin >> c) 
        if (isspace(c)) 
         break; 
    

Это имеет дополнительное преимущество, что в ошибочном вводе, как это:

abc 12.14 

Вы не игнорируете всю строку, а только abc.

0
double number 
if (cin >> number) { 
    do_stuff_with(number); 
} else { 
    std::cerr << "That wasn't a number!"; 
} 
0

Вы можете использовать регулярное выражение, чтобы решить ее

double inputNumber() 
{ 
    string str; 
    regex regex_double("-?[0-9]+.?[0-9]+"); 
    do 
    { 
     cout << "Input a positive number: "; 
     cin >> str; 
    }while(!regex_match(str,regex_double)); 

    return stod(str); 
} 

Помните, что включают в себя регулярное выражение библиотеки в заголовке.

Смежные вопросы