2013-01-09 3 views
7

Ich lese das Buch „The C Programming Language“, und es ist eine Übung, dass der Ausdruck, um zu überprüfen, fragte getchar() != EOF nun 1 oder 0 den ursprünglichen Code zurückkehrt, bevor ich gebeten wurde, das zu tun war:Warum kann ich den Wert von EOF nicht in C finden?

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

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

Also dachte ich, ändert es an:

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(); 
    } 
} 

Und die Antwort im Buch ist:

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

Cou Bitte erklären Sie mir, warum mein Weg nicht funktioniert hat?

+1

Ich bin überrascht * any * davon funktioniert ohne '# include' Dateien. – WhozCraig

+0

es ist alles mit #include natürlich – MNY

+1

Die Übung fragen Sie den Wert von 'getchar()! = EOF', nicht den Wert von' getchar() '. – effeffe

Antwort

5

Denn wenn c ist EOF, die while Schleife endet (oder wird nicht einmal starten, wenn es bereits EOF auf dem ersten Zeichen ist typisiert). Die Bedingung für das Ausführen einer anderen Iteration der Schleife ist, dass cNICHTEOF ist.

4

Um den Wert von EOF

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

EOF definiert in stdio.h normalerweise als -1

-2

in Ihrem Programm angezeigt werden Sie Zeichen aus std Eingang als c = getchar lesen();

Auf diese Weise können Sie den ASCII-Wert der gedrückten Taste abrufen, die niemals gleich EOF sein wird.

, weil EOF Dateiende ist.

besser Sie versuchen, eine vorhandene Datei zu öffnen und aus der Datei zu lesen, wenn es End of File (EOF) erreicht, wird es die While-Schleife beenden.

auch die Antwort in dem Buch:

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

versuchen, das Programm zu verstehen, ist es einen Schlüssel bekommt, die EOF nicht gleich sein werden, so ist es immer „Der Ausdruck getchar() gedruckt werden soll = EOF ergibt 0 ".

hoffen, es hilft .......

+1

Der Standard benutzt kein ASCII, aber wichtiger, 'getchar' gibt' EOF' zurück im Falle des Dateiendes und dieser Wert wird tatsächlich in 'c' gespeichert, deshalb deklarieren wir' c' als "int" anstelle von "char". Daher könnte die Antwort des Buches sowohl "0" als auch "1" drucken. Wenn sich das Zeichen von "EOF" unterscheidet, sollte es "1" und nicht "0" ausgeben. – effeffe

3

EOF kann durch Drücken der Tasten Strg + d in Unix und ctrl + c in Windows über die Tastatur ausgelöst werden.

Beispielcode:

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

Ausgang:

[[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

Ich glaube, Control-C ist Interrupt auf Windows; control-Z ist die EOF-Angabe. –

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

machen es c = EOF statt!. Weil Sie das Ergebnis des Ausdrucks und nicht das Zeichen drucken möchten.

Verwandte Themen