void get_english_input() {
string input = " ";
stringstream my_string(input);
int ft;
double in;
while(true) {
cout << "Enter an integer value of feet." << endl;
getline(cin, input);
my_string << input;
if(my_string >> ft)
break;
cout << "Invalid input! Please try again." << endl;
}
cout << "you entered " << ft << " as the int value for feet." << endl;
/*while(true) {
cout << "Enter a double value of inches." << endl;
getline(cin, input);
my_string << input;
break;
cout << "Invalid input! Please try again." << endl;
}
cout << "we are done entering english input" << endl;
cout << "feet = " << ft << endl;
cout << "inches = " << in << endl;*/
}
Этот код должен проверять, является ли ввод целым числом, пытаясь поместить содержимое my_string в ft. Если я ввожу букву вместо целого числа, я получаю сообщение об ошибке «Неверный ввод! Пожалуйста, повторите попытку», это то, что должно произойти. Проблема в том, что после того, как я получу это сообщение один раз, я получу его для каждого ввода после этого, даже если следующий ввод действителен.
Кто-то предложил мне использовать std :: cin.clear (); для очистки флагов ошибок. Я попытался поместить его перед getline (), и это не изменило проблему. Я использовал это неправильно?