come il tipo intero può gestire il flusso di testo (getchar ()) in C? [chiuso]

-2

Durante la programmazione in C di Ritchie e kernighan, ho trovato il seguente codice.

#include<stdio.h>
int main() {
    int t;
    t = getchar();
    while ((t=getchar()) != EOF) {
            putchar(t);
    }
    return 0;
}

Non riesco a capire come può una variabile di tipo intero c, essere usata per gestire il flusso di testo bufferizzato,

delimitato da newline o ctrl-D,

Quando ci ho provato, printf("%d",getchar());

mi sta dando il valore ASCII del solo primo carattere, ma qui t sembra manipolare l'intero buffer finché non premo invio,

e quando premo ctrl-D tra le righe, copia solo il precedente contenuto del buffer.

significa ctrl-D è un delimiter oltre a "EOF"? Qualcuno può spiegarmi la logica dietro?

    
posta lazarus 24.04.2015 - 02:58
fonte

1 risposta

1

Di solito, il sistema operativo gestisce il flusso di testo bufferizzato. Lo fa per una serie di motivi, principalmente per le prestazioni, ma anche per supportare funzionalità come la modifica in linea.

Il tuo programma sta dormendo finché non premi enter o ctrl-D. A quel punto, l'intera riga viene passata al flusso di input dei programmi. Quindi ogni chiamata getchar recupererà solo un carattere da quel flusso alla volta e lo restituirà in t. Finché è disponibile l'input, getchar ritornerà immediatamente con il primo carattere di quei dati.

Quindi la prossima domanda è cosa succede quando la stringa si esaurisce. Supponendo che tu non abbia indicato la fine del file con ctrl-D, getchar si bloccherà mentre aspetta l'input dell'utente, e il tuo programma si riattiva mentre il sistema operativo torna al lavoro.

Quindi, t non sta manipolando l'intera linea, il sistema operativo è, e t non è ancora stato assegnato a questo punto, perché getchar non è ancora stato restituito.

    
risposta data 24.04.2015 - 10:57
fonte

Leggi altre domande sui tag