2013-10-27 1 views
1

Проблема, которую я получаю сейчас, заключается в том, что я могу вводить случайные вещи в первый раз, и это работает правильно, но во второй попытке он будет принимать неверные входы. EX: 1-й входной шахматы, он скажет, попробуйте еще раз. Второй вход в шахматы он будет принимать шахматы и открытую проверку затем положить час в сумму депозита вызывает ошибки повторите попытку2-й ответ invaild принимается в моем цикле проверки

case 1: 
    cout << "Checking (C) or Savings (S): enter your choice" << endl; 
    cin.get(choice); 

    //input validation 
    while(choice != 'c' && choice != 'C' && choice != 's' && choice != 'S') 
    { 
     cin.clear(); 
     cin.ignore(100, '\n'); 
     cout << "Invalid input. Try again: "; 
     cin.get(choice); 
    } 

    //deposit in checking 
    if (choice == 'c' || choice == 'C') 
    { 
     cout << "how much are you depositing: $" << endl; //get deposit 
     cin >> deposit; 

     while(!(cin >> deposit)) //make sure user input is valid 
     { 
      cin.clear(); 
      cin.ignore(numeric_limits<streamsize>::max(),'\n'); 
      cout << "Invalid input. Try again: "; 
     } 
+0

это домашнее задание, но эта часть не требуется, я просто пытаюсь узнать немного больше о проверках входных контуров, потому что они будут в нашем следующем проекте. – user2087867

+0

В конце вашего кода отсутствует закрывающая скобка ('}'). – Snps

ответ

1

Ваш код будет принимать любой входной сигнал, который начинается с c или s (или их строчными).

cin.get(choice) прочитает первый символ из потока и сохранит его в choice, который вы позже используете в качестве условного в цикле.

Лучшим подходом было бы считывание всей строки из потока и проверка того, что она равна любому правильному выбору.

std::cout << "Checking (c) or Savings (s) enter your choice: "; 
std::string line; 
while (std::getline(std::cin, line)) { 
    std::transform(std::begin(line), std::end(line), std::begin(line), 
     ::tolower); // Transform line to lower case. 
    if (line == "c" || line == "s") { 
     break; 
    } else { 
     std::cout << "Invalid input. Try again: "; 
    } 
} 
+0

, но почему он не принимает его в первый раз, а затем принимает его во второй раз? – user2087867

+0

, и я не понимаю std :: stuff, но ваш пример немного запутанный. – user2087867

+0

@ user2087867. Ваш код принял входную строку 'chess' как первый, так и следующий раз, когда я скомпилировал и запустил ее. – Snps

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