У Кернигана, Ритчи утверждается (с. 30), что данный код
- #include <stdio.h>
- main()
- {
- int c;
- while((c=getchar())!=EOF) putchar(c);
- }
копирует входной поток в выходной и, цитирую, "когда достигается конец потока, цикл, а вместе с ним и функция main(), прекращают работу"
У меня эта программа работает не так, как хочется мне. А замысел авторов я не знаю.
У меня получается, что программа прекращает работу, только если в потоке символов встречается сочетание "EOF, EOF" или "\n, EOF". Одиночные же "\n" и "EOF" работают примерно одинаково. Они не прерывают цикл while, а лишь скармливают getchar'у очередную порцию символов с клавиатуры, после чего курсор снова мигает и ждёт от меня новых символов. Только в первом случае курсор переносится на новую строку, а во втором нет. Поясню на примере.
Введены символы t,e,s,t. Я печатаю символ "\n" (нажимаю Enter) (Это ведь одно и то же, да?), программа на новой строке пишет test, после чего ждёт от меня очередной порции символов. Если я напечатаю символ "EOF" (нажимаю Ctrl+D), то программа на этой же строке пишет test, после чего ждёт новых символов. А вот если в любом из двух вариантов опять нажать Ctrl+D, то программа таки завершается. Так и должно быть? Почему после первого ввода условие while игнорируется?
P.S. gcc версия 4.6.3.