2015-01-20 3 views
-4
#include<stdio.h> 
main() 
{ 
    int c; 
    c=getchar(); 


    while(c!=EOF) 
    { 
     putchar(c); 
     c=getchar(); 
    } 
} 

Почему этот код приводит к бесконечному циклу. Это из книги Д. Ричи.Почему этот код приводит к бесконечному циклу?

+8

Что должно быть '** EOF **'? –

+1

Как вы его запускаете и вводите? – interjay

+3

Возможно, потому что ваш пользователь никогда не входит в символ EOF? –

ответ

2

Это приводит к бесконечному циклу, потому что EOF не является символом, который можно ввести с клавиатуры.

Взгляните на это: EOF in Windows command prompt doesn't terminate input stream

+0

Почему ctrl-z не работает, если не положить после '\ n'? Я прочитал некоторое объяснение об этом ответе, в котором говорится о буфере. Пожалуйста, объясните мне, что такое буфер? Я этого не понимаю. – Gyanshu

0

Выполнить этот код в Linux после прочтения последней части моего ответа;)

#include <stdio.h> 

int main(void) 
{ 
    int c; 
    c=getchar(); 

    while(c!=EOF) 
    { 
     putchar(c); 
     c=getchar(); 
    } 
    printf("\n %c %d \n",c,c); 

    return 0; 
} 

если вы хотите ввести EOF символ, который вы можете нажать Ctrl + d с клавиатуры, которой является конечный файл

вы можете увидеть последнюю строку в выводе, которые относятся к характеру EOF с числовым значением равно -1

Как примечание EOF является символьной константой со значением -1, и вы можете увидеть его определение в файле заголовок stdio.h

#define EOF (-1) 
+0

Ваш главный должен возвратить 'int'. –

Смежные вопросы