2013-01-09 11 views
7

Sto leggendo il libro "The C Programming Language" e non v'è un esercizio che ha chiesto di verificare che l'espressione getchar() != EOF sta tornando 1 o 0. Ora il codice originale prima che mi è stato chiesto di fare che era:Perché non riesco a trovare il valore di EOF in C?

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

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

così ho pensato di cambiarlo a:

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

E la risposta nel libro è:

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

Cou Per favore, mi spieghi perché la mia strada non ha funzionato?

+1

Sono sorpreso * qualsiasi * di questo funziona senza file '# include'. – WhozCraig

+0

è tutto con #include ovviamente – MNY

+1

L'esercizio ti chiede il valore di 'getchar()! = EOF', non il valore di' getchar() '. – effeffe

risposta

5

Perché se c è EOF, i while termina loop (o non ancora di iniziare, se è già EOF sul primo carattere digitato). La condizione per eseguire un'altra iterazione del ciclo è che c è NONEOF.

4

Per visualizzare il valore di EOF

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

EOF è definito in stdio.h normalmente come -1

-2

nel programma che si sta leggendo carattere da input std come c = getchar();

in questo modo è possibile ottenere il valore ASCII del tasto premuto, che non sarà mai uguale a EOF.

perché EOF è Fine del file.

meglio si tenta di aprire qualsiasi file esistente e leggere dal file, quindi quando ha raggiunto End Of File (EOF), si chiuderà il ciclo while.

bene la risposta nel libro è:!

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

cercare di capire il programma, si ottiene una chiave, che non sarà uguale a EOF quindi dovrebbe sempre stampare "Il getchar espressione() = EOF è valutato a 0 ".

Speranza che aiuta .......

+1

Lo standard non usa ASCII, ma più importante, 'getchar' restituisce' EOF' in caso di fine del file e questo valore è effettivamente salvato in 'c', per questo dichiariamo' c' come 'int' invece di' char'. Pertanto, la risposta del libro potrebbe stampare sia '0' o' 1'. Ad ogni modo, se il carattere è diverso da 'EOF', dovrebbe stampare' 1', non '0'. – effeffe

3

EOF può essere attivato tramite tastiera premendo i tasti Ctrl + D in Unix e Ctrl + C in Windows.

codice di esempio:

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

uscita:

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

Credo che control-C sia interrotto su Windows; control-Z è l'indicazione 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

rendono C = EOF invece!. Perché vuoi stampare il risultato dell'espressione e non il carattere.

Problemi correlati