#c #input
#c #ввод
Вопрос:
cout << "Enter the numbers to be stored (end with a letter): ";
cin >> number;
while(!(cin.fail())){
numbers.push_back(number);
cin >> number;
}
for(int i = 0; i < numbers.size(); i ){
node->insertKey(numbers.at(i));
}
int search;
cout << "Which number do you want to look up? ";
cin >> search;
Я хочу брать числа из пользовательского ввода, пока пользователь не введет букву.
После этого я хочу ввести другой пользовательский ввод. Мой вывод работает нормально. Поэтому, когда я ввожу букву, она останавливается. Но он не запрашивает второй ввод. Как я могу это исправить?
Комментарии:
1. Самый простой способ исправить это — переписать все, чтобы использовать
std::getline
для чтения каждой строки ввода, а затем проанализировать ее соответствующим образом.
Ответ №1:
Было бы лучше сначала сделать это так:
while (cin >> number)
numbers.push_back(number);
Приведенное выше оставляет пустое vector
значение, если они вводят символ перед любым допустимым числом, в то время как ваш исходный код помещает бессмысленное число в vector
.
Затем, если они ввели букву, cin
поток будет переведен в состояние ошибки и по-прежнему будет содержать ввод символов, от которого вы захотите избавиться:
// clear stream errors
cin.clear();
// actually get rid of the line with the character on it...
cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
Затем вы можете продолжить цикл for и выполнить поток в search
.
Ответ №2:
Когда cin
установлены флаги ошибок fails, их необходимо очистить.
В дополнении вам нужно будет очистить stdin
буфер, который будет содержать любые символы, которые не были проанализированы в предыдущем cin
.
//...
std::cin.clear(); //clear flags
cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n'); //clear buffer
//...
int search;
cout << "Which number do you want to look up? ";
cin >> search;
//...
Комментарии:
1. Очистка / игнорирование должно быть перед попыткой потоковой
search
передачи.2. @TonyDelroy, да, мой плохой, скопировал / вставил неправильно. Спасибо за предупреждение.
Ответ №3:
Я думаю, что это поможет
cout << "Enter the numbers to be stored (end with a letter): ";
cin >> number;
while(cin>>number){
if(((char)number>='a' amp;amp; (char)number<='z')||((char)number>='A' amp;amp; (char)number<='Z'))break;
numbers.push_back(number);
cin >> number;
}
for(int i=0; i<numbers.size(); i ){
node->insertKey(numbers.at(i));
}
int search;
cout << "Which number do you want to look up? ";
cin >> search;