2013-01-09 14 views
7

Czytam książkę „C Programming Language” i nie jest to ćwiczenie, które poproszono o sprawdzenie, czy wyrażenie getchar() != EOF wraca 1 lub 0. Teraz oryginalny kod zanim poproszono mnie, aby to zrobić był:Dlaczego nie mogę znaleźć wartości EOF w C?

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

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

więc pomyślałem, zmieniając go do:

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

    while (c != EOF) 
    { 
     printf("the value of EOF is: %d", c); 
     printf(", and the char you typed was: "); 

     putchar(c); 
     c = getchar(); 
    } 
} 

A odpowiedź w książce jest:

int main() 
{ 
    printf("Press a key\n\n"); 
    printf("The expression getchar() != EOF evaluates to %d\n", getchar() != EOF); 
} 

Cou Proszę wyjaśnić mi, dlaczego moja droga nie zadziałała?

+1

Jestem zaskoczony * jakikolwiek * z tego działa bez plików '# include'. – WhozCraig

+0

to wszystko z #include oczywiście – MNY

+1

W ćwiczeniu pojawi się wartość 'getchar()! = EOF', a nie wartość' getchar() '. – effeffe

Odpowiedz

5

Bo jeśli c jest EOF, że while kończy pętli (lub nawet nie uruchomić, jeśli jest już EOF na pierwszy znak wpisany). Warunkiem uruchomienia kolejnej iteracji pętli jest to, że c jest NOTEOF.

4

Aby wyświetlić wartość EOF

#include <stdio.h> 
int main() 
{ 
    printf("EOF on my system is %d\n", EOF); 
    return 0; 
} 

EOF jest zdefiniowana w stdio.h zwykle jako -1

-2

w programie czytasz znak z wejścia std jako c = getchar();

w ten sposób można uzyskać wartość ascii wciśniętego klawisza, który nigdy nie będzie równy EOF.

ponieważ EOF jest Koniec pliku.

lepiej spróbować otworzyć dowolny istniejący plik i odczytać z pliku, więc kiedy osiągnie koniec pliku (EOF), zakończy pętlę while.

dobrze odpowiedź w książce jest:

int main() 
{ 
    printf("Press a key\n\n"); 
    printf("The expression getchar() != EOF evaluates to %d\n", getchar() != EOF); 
} 

spróbować zrozumieć program, robi się klucz, który nie będzie równe EOF tak powinno zawsze Drukuj „getchar ekspresji() = EOF ocenia na 0 ".

nadzieję, że pomoże .......

+1

Standard nie używa ASCII, ale ważniejsze, 'getchar' zwraca' EOF' w przypadku końca pliku, a ta wartość jest faktycznie zapisana w 'c', dlatego deklarujemy' c' jako 'int' zamiast' char'. Dlatego odpowiedź na książkę może wydrukować zarówno "0" lub "1". W każdym razie, jeśli postać jest różna od 'EOF', powinna wypisać' 1', a nie '0'. – effeffe

3

EOF może być wywołane przez klawiaturę naciskając klawisze Ctrl + D w Uniksie i Ctrl + C w systemie Windows.

Przykładowy kod:

void main() 
    { 
      printf(" value of getchar() != eof is %d ",(getchar() != EOF)); 
      printf("value of eof %d", EOF); 
    } 

wyjściowa:

[[email protected] prac]# ./a.out 
a 
value of getchar() != eof is 1 value of eof -1 
[[email protected] prac]# ./a.out 
Press ctrl+d 
value of getchar() != eof is 0 value of eof -1[[email protected] prac]# 
+0

Wierzę, że kontrola C jest przerwana w systemie Windows; control-Z to wskazanie EOF. –

1
Here is my one, 
i went through the same problem and same answer but i finally found what every body want to say. 
System specification :: Ubuntu 14.04 lts 
Software :: gcc 


yes the value of EOF is -1 based on this statement 
printf("%i",EOF); 

but if your code contain like this statement 
while((char c=getchar)!=EOF);; 
and you are trying to end this loop using -1 value, it could not work. 

But instead of -1 you press Ctrl+D your while loop will terminate and you will get your output. 
0

sprawiają, że c = EOF zamiast!. Ponieważ chcesz wydrukować wynik wyrażenia, a nie znak.

Powiązane problemy