cin.clear () оставить EOF в потоке? - PullRequest
0 голосов
/ 06 ноября 2019

У меня вопрос по поводу 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 системами?

...