Я понимаю, что использовать ctrl-z для сигнала EOF или EOT, как правило, устарел и не рекомендуется, но мне просто интересно, что происходит под капотом.
Скажем, у меня есть что-то подобное в C ++:
#include #include int main() { while (!cin.eof()) { string str; getline(cin, str); } cout << "out of while" << endl; return 0; }
Если я выполняю abc [^ Z] [новая строка], программа все еще работает. То же самое для abc [^ D] [новая строка].
Но если я ввожу строку, содержащую только [^ Z] [новую строку], программа существует правильно.
Я понимаю, что, скорее всего, это ОС, но мне просто интересно, что там происходит.
Во-первых, эта статья имеет отличное представление о Ctrl-Z (DOS / Windows) и Ctrl-D (UNIX / Linux): http://latedev.wordpress.com/2012/12/04/all-about-eof/
Это стоит прочитать. Он также указывает на проблему с вашим while-loop выше.
Самое главное, что Ctrl-Z не указывает EOF. Однако, когда это первый символ в строке, большинство программ Windows, читающих с консоли, распознают это как конец ввода. Результат – это EOF на cin
. Действительно, файлы, открытые в текстовом режиме, могут вести себя одинаково, хотя ничто в стандарте C ++ их не требует.
Обратите внимание, что исторически Ctrl-Z для конца ввода должно быть в начале строки. Ctrl-Z в другом месте на линии не имеет такого же эффекта.