У меня вопрос по поводу cin.clear()
, мой код cpp выглядит следующим образом:
#include <iostream>
using namespace std;
int main(void)
{
char c, d;
cout << "Enter a char: " << endl;
cin >> c; // here I will enter Ctrl + D (that is EOF under linux)
cin.clear();
cout << "Enter another char: " << endl;
cin >> d;
return 0;
}
Я скомпилировал и запустил этот код в 2 системах: одна система - Debian 7 с более старой версией программного обеспечения, например, g ++ ибиблиотека
g++ --version
g++ (Debian 6.3.0-18+deb9u1) 6.3.0 20170516
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
другой системой является Arch linux с более новой версией программного обеспечения:
g++ --version
g++ (GCC) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Когда я запускаю эту программу, я нажимаю Ctrl + D (EOF), когда она просит меня "Введите символ: ". Проблема в том, что когда я запускаю его под Debian 7, я могу ввести символ, когда программа попросит меня ввести «Введите другой символ:», но я не смогу сделать то же самое в более новой системе, программа только что закончила.
Похоже, что cin.clear()
удалит все биты и сбросит EOF в потоке в более старой системе, с более новой системой cin.clear()
удалит все биты, но оставит EOF в потоке нетронутым.
Это вызвано некоторыми новыми стандартами CPP? И почему cin.clear()
ведут себя по-разному под 2 системами?