#c #cin
#c #cin
Вопрос:
#include <iostream>
using namespace std;
int main(){
int const size = 10;
char input_1[size];
char input_2[size];
cout << "Enter input 1: " << endl;
cin.get(input_1, size);
cin.get();
cin.clear();
cout << "Enter input 2: " << endl;
cin.get(input_2,size);
cout << "input_2 = " << input_2 << endl;
return 0;
}
ВЫВОД1
~/cplusplus $ ./conundrum.o
Введите ввод 1:
qwe
Введите ввод 2:
asd
input_2 = asd
ВЫВОД 2
~/cplusplus $ ./conundrum.o
Введите ввод 1:
Введите ввод 2:
вход_2 =
~/cplusplus $
Когда я ввожу непрерывный поток символов, эта программа выводит, как и ожидалось. ВЫВОД 1 показывает ожидаемый результат. Но когда я нажимаю enter только для первого ввода, этот код не запрашивает input_2 и выдает пустой input_2, показанный на ВЫХОДЕ 2. Насколько я понимаю, символ новой строки должен был быть уничтожен cin.get(), а failbit, установленный в какое-то ненормальное состояние (после того, как нечего хранить в input_1), должен быть сброшен cin.clear(), чтобы подготовиться ко второму cin.get(input_2, …) . В чем проблема?
Ответ №1:
Вы должны внести это изменение
cin.get(input_1, size);
cin.clear();
cin.get();
В вашем коде cin.get()
сбой, потому что бит fail уже установлен.
Комментарии:
1. Спасибо. Теперь я вижу, в чем проблема.