2015-09-23 3 views
-3
#include <stdio.h> 
int main() { 
int c; 
while ((c = getchar()) != EOF) { 
    putchar(c); 
    } 
} 

Это прекрасно работает, когда EOF (Ctrl + Z) находится в новой строке, но когда вход является:
блабла^г
он не работает. Когда я отлаживаю программу, он сообщает мне, что вход «^ z» (^ z = EOF) сохраняется как 26,
, но когда вход^z находится в новой строке, он сохраняется как -1. Почему?
в случае, если что-то неясно:
он сохраняется в переменной с, а не работа означает, что оно не прекращает время цикла, только тогда, когда вход^г помещается в новую строку он tearminates петлю
им с помощью windowsGetChar и EOF C программирование

+2

Вы забыли '#include ' в своем коде. Ваш вопрос, вероятно, зависит от операционной системы. В моей Linux-системе CtrlZ не имеет отношения к EOF. –

+0

Попробуйте подключить файл. Терминалы ведут себя иногда странно из-за буферизации строк. – Olaf

+0

"не работает" нет ** специфический ** описание проблемы. Также не понятен «вход^z сохранен как 26». Где он спасен? Какой вход? – Olaf

ответ

0

Возможно, вы используете его неправильно, а символ CTRL + z не отправляется функции getchar() (которая даст EOF), а системе, которая запускает вашу программу (например, она будет «остановлена») программа).

Попробуйте

#include <stdio.h> 

int main() { 
int c; 
while ((c = getchar()) != EOF) { 
// while ((c = getchar()) != '.') { 
    putchar(c); 
    } 
    putchar('W'); 
} 

Вы видите выводе 'W' в любом случае? (особенно при использовании новой строки?) в моем случае, я получаю «Stopped» (в системе UNIX, CTRL+Z is used to suspend a process).

On Windows system, the answer has already been given on SO:

В конце строки, попав^Z (или^D на Linux) не вызывает драйвер терминала для отправки EOF. Это только заставляет буфер сбросить ваш (без \ n).

Нажатие кнопки^z (или^d на linux) в начале строки интерпретируется терминалом как «Я хочу сигнализировать EOF».

+0

Yea видит выход W (btw im using windows) – sebastian

+0

Ну, после того, как я пытаюсь использовать окна, я получаю то же поведение, что и ваш. – cyrobin

+0

Хорошо, на самом деле это был ответ здесь: http://stackoverflow.com/questions/7373386/eof-in-windows-command-prompt-doesnt-terminate-input-stream – cyrobin