Как мне заставить eof на стандартный ввод? - PullRequest
5 голосов
/ 15 января 2011

Для приложения C ++, как я могу программно принудительно завершить конец файла (EOF) на стандартном вводе?

Ответы [ 3 ]

9 голосов
/ 15 января 2011

Если вы находитесь в терминале Unix-подобной системы, нажмите Ctrl-D.В Windows Ctrl-Z.

Редактировать: увидев желание сделать это "программно", я предлагаю попробовать fclose(stdin).Если каким-то образом это не достаточно хорошо, более безумной идеей может быть использование std::cin.rdbuf(), чтобы установить поток для ссылки на что-то отличное от истинного стандартного ввода, а затем делать то, что вы хотите с этим потоком.Но это начинает плохо пахнуть, как будто вы боретесь с компьютером, поэтому я хотел бы узнать больше о том, какова реальная цель.

6 голосов
/ 15 января 2011

На самом деле, вы не можете. Пока вы можете читать данные из stdin, EOF не был достигнут, и на самом деле вы никогда не сможете достичь его. Однако вы можете закрыть саму stdin. Чтобы закрыть его, сделайте это:

fclose(stdin);

После этого вы не можете читать данные из stdin.

1 голос
/ 21 июля 2015

Есть хорошая маленькая функция, доступная для каждого потока, созданного специально для этого.

Это синтаксис что-то вроде:

      stream.setstate(stream.flags)


Таким образом, в вашем коде может быть простое условие, которое вызывает что-то вроде:

      std::cin.setstate(std::cin.eofbit);


Документация для этого довольно скудна, но некоторые есть на cppreference.com и cplusplus.com .

...