2014-11-04 4 views
0

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

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

// This program uses a function template. 
    #include <iostream> 
    #include <iomanip> 
    #include <string> 
    using namespace std; 

// Template definition for square function. 
    template <class T> 
    T maximum (T number1 , T number2) 
    { 
    if (number1 > number2) 
    return number1;  
    else  
    return number2; 
    } 

    template <class S> 
    S minimum (S number1 , S number2) 
    { 
    if (number1 > number2) 
    return number2;  
    else  
    return number1; 
    } 

int main() 
{ 
double user_input1 = 0; // To hold integer input 
double user_input2 = 0; 
int menu_choice = 0; 

cout << " Please Enter The First Number To Be Evaluated "; 
cin >> user_input1; 

cout << " Please Enter The Second Number To Be Evaluated "; 
cin >> user_input2; 

system ("cls"); 

cout << " Your Entry Was As Followed 1: " << user_input1 << " 2: " <<user_input2; 

cout << "\n 1. This Option Will Show You The Greater Argument "; 

cout << "\n 2. This Will Show You The Lesser Argument "; 

cout << "\n Your Menu Choice Is "; 
cin >> menu_choice; 

switch (menu_choice) 
{ 
case 1: 
    cout << maximum (user_input1 , user_input2); 
    break; 
case 2: 
    cout << minimum (user_input1 , user_input2); 
    break; 
defualt : 
    " INVALID ENTRY "; 
} 
system ("pause"); 
return 0; 
} 
+2

Для начала вам необходимо проверить, что вы вступили в успешную работу: если 'std :: cin >> user_inputs1;' –

+1

'defualt:'? Стандартная ошибка, пожалуйста, исправьте. – Deduplicator

+1

@Deduplicator: почему вы думаете, что у вас нет метки в выражении 'switch'? Вероятно, это не то, что было предназначено, но, безусловно, это нормально в соответствии с языковой спецификацией. –

ответ

0

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

Когда вы подаете "November" в user_input1, вы, вероятно, инициализируете это число целым адресом первого элемента этого массива (исправьте меня здесь). Затем он будет неявно преобразован в double с int (возможно).

Внедрение bool is_number(std::string const& input) Функция для проверки только чисел во вход пользователя в этом коде. Вы можете сделать это следующим образом (к примеру):

#include <assert.h> 
#include <iostream> 
// ... // 
int main() { 

    string input; 

    cout << " Please Enter The First Number To Be Evaluated "; 
    cin >> input; 
    assert(is_number(input)); 
    double user_input1 = stod(input); 

    cout << " Please Enter The Second Number To Be Evaluated "; 
    cin >> input; 
    assert(is_number(input)); 
    double user_input2 = stod(input); 
    // ... // 
} 

В общем, assert используется для отладки. Вместо этого вы можете использовать инструкцию if-else и написать сообщение об ошибке при неправильном вводе пользователя. Я пишу пример выше из-за его короткого замыкания.

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