2017-01-16 6 views
0

нас попросили сделать небольшую программу, которая будет печатать каждый символ из stdin с помощью getchar() ... Я думал, что следующий код будет работать, но когда я запустил его в консоли Windows ничего происходит, курсор зависает на неопределенное время, как будто он ждет ввода ...печать stdin char на char до конца файла

int c = 0; 
while(c != EOF) 
{ 
    c = getchar(); 
    printf("%c\n", c); 
} 
printf("\nOut of loop!\n"); 

я думал, что код будет печатать поток полукокса на гольца, и если бы не было ничего стандартного ввода, GetChar() возвращает EOF и тому цикл остановится .. я думаю, что я неправильно понимаю, как ввод делается на C, для новичка это действительно запутывает ... Любая помощь!


Другого запутанным пример:

char str[100]={0}; 
printf("Entrer a string: "); 
scanf("%s",str); //i'll enter a string with spaces to have something to print in the loop 
//let's say i enter Hello Wor^Zld! 
int c = 0; 
while(c!=EOF) 
{ 
    c = getchar(); 
    printf("%c",c); 
} 
printf("Finally done with loop!!\n"); 


, когда я запускаю приведенный выше код я получаю следующее отображение в консоли:
Wor->
с тем же старым курсором висит, ожидая ввода ... Любая идея, почему? кажется, что Ctrl-Z + Enter «^ Z-Enter» остановил отображение, но цикл продолжается? я честно делаю все возможное, чтобы понять, но я должен быть честным, что это сбивает с толку. Заранее благодарю за помощь и поддержку!

+3

Да, это * ждем ввода из 'stdin' (обычно это клавиатура), если вы не перенаправляете входные данные из мультии. Функция не вернет 'EOF', пока вы не наберете« Ctrl-D Enter »(Linux) или« Ctrl-Z Enter »(Windows). –

+3

minor note: 'while (c! = EOF) { c = getchar();' -> 'while ((c = getchar())! = EOF) {' – BLUEPIXY

+0

@BLUEPIX да, это одно и то же, но как новичок, я бы не стал помещать все в цикл: P – user7427260

ответ

0

Вы должны очистить свой выход, если хотите, чтобы он был напечатан, когда вы хотите. Перед тем, как попытаться напечатать своего персонажа, необходимо проверить EOF.

int c; 
while((c = getchar()) != EOF) 
{ 
    printf("%c\n", (char)c); 
    fflush(stdout); 
} 
printf("Out of loop!\n"); 
Смежные вопросы