Codice:EOF nel prompt dei comandi di Windows non termina flusso di input
#include <stdio.h>
#define NEWLINE '\n'
#define SPACE ' '
int main(void)
{
int ch;
int count = 0;
while((ch = getchar()) != EOF)
{
if(ch != NEWLINE && ch != SPACE)
count++;
}
printf("There are %d characters input\n" , count);
return 0;
}
Domanda:
Tutto funziona bene, ignorerà spazi e newline e uscita numero di caratteri immessi sullo schermo (in questo programma tengo solo virgola, punto esclamativo, numeri o qualsiasi simbolo di simbolo speciale stampabile come la e commerciale come carattere) quando colpisco la simulazione EOF che è
^z
.Ma c'è qualcosa di sbagliato quando inserisco questa linea nel programma. Per esempio, inserisco questo:
abcdefg^z
, il che significa che ho inserito un carattere prima e sulla stessa riga di^z
. Invece di terminare il programma e stampare i caratteri totali, il programma continuerà a chiedere input.L'input di carattere di terminazione EOF funziona solo quando si specifica
^z
su una singola riga o in tal modo:^zabvcjdjsjsj
. Perché sta succedendo?
Quindi perché^z non viene conteggiato come un carattere quando lo metto dopo un flusso di caratteri in una riga ?? Ad esempio "abcdefg^z" restituisce solo "Ci sono 7 caratteri in ingresso" invece di 8 dopo l'input^z dopo quella linea. – caramel1995
@ caramel23: Credo che la console di Windows semplicemente la ignori e non passi un personaggio al programma in esecuzione. Non so perché questo succede. –