windows - C input - getchar ()

Indlæg af Hanne Mølgaard Plasc

Problem



Det er et grundlæggende spørgsmål .. men nødt til at spørge. For et program som dette, hvis brugsagen er 123 ^ Z, afslutter programmet ikke, selvom jeg sætter en EOF i slutningen (Ctrl + Z). Hvorfor er det så? Det er først, når jeg lægger en EOF efter en CR, at den fungerer. Eventuelle anwers vil blive værdsat. Tak.


#include < stdio.h>

void main()
{
    int i, nc;

    nc = 0;
    i = getchar();
    while (i != EOF) {
        nc = nc + 1;
        i = getchar();
    }
    printf("Number of characters in file = \%d
", nc);
}

Bedste reference


I Windows vil Ctrl-Z-genvejen først træde i kraft, hvis den trykkes i starten af ​​en linje. Ellers ignorerer OS det. Du skal trykke på 'Enter' eller 'Return' for at indsætte et newline-tegn først.


I Unix vil Ctrl-D genvej skylles straks stdin (som nævnt i nedenstående kommentarer), men vil ikke forårsage getchar() at returnere EOF, medmindre du er på en ny, tom linje ; det samme som i Windows.


Fra kommentarerne (nedenfor):



  Der er ikke noget 'EOF-tegn' på Unix. En EOF er simpelthen en nullængde læst. Det sker i slutningen af ​​almindelige filer og kan tvinges på en terminal ved at trykke på den kontrol tegn, der er blevet opsat i terminalindstillingerne for EOF (normalt ^ D). Årsagen ^ D 'virker ikke', når Terminalbufferen er ikke tom, at den ikke tilføjer noget i strømmen, det forårsager bare, at den afventende læsning vender tilbage, men da inputlængden er ikke-null, bliver den ikke behandlet som en 'EOF' af ansøgningen.



Dette behandler et godt punkt - ingen fil faktisk indeholder EOF - og tryk på Ctrl-D vandt 't' indsæt '(som jeg tidligere havde sagt) noget i stdin streamen .Det bare spyler stdin. EOF er en standardmakro, der repræsenterer en meddelelse om, at slutningen af ​​filen blev nået af en standardfunktion.


Takket være @R. for forklaringen om EOF.