View Single Post
Old 24-02-2010, 19:02   #10
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2774
In effetti non avevo notato che quando raggiungi EOF scanf ritorna proprio EOF.
Ho provato a scrivere la mia soluzione in codice ma ho trovato dei problemi. EOF in windows ha il valore -1, quindi sia che tu digitassi CTRL+Z sia che digitassi -1 con il sistema che descrivevo otterresti di aver raggiunto EOF, erroneamente nel secondo caso. Avrei dovuto pensarci prima in effetti.

Allora, direi di dimenticare il getchar, anche perché è perfettamente sostituibile con
Codice:
char carattere;
scanf("%c",&carattere);
Per il passaggio di parametri e le funzioni in generale prova a vedere questo link:
http://digilander.libero.it/uzappi/C/C-funzioni.html
Mi sembra fatto abbastanza bene.

Dobbiamo ideare una nuova intestazione per la funzione che devi scrivere, in modo da poter distinguere il valore EOF dal valore -1.
Potremmo usare:
int readInt(int* var);
E decidere che readInt restituisca 1 se ha letto un valore intero e *val conterrà il valore letto, e restituisca -1 se ha letto EOF (e val resterà invariato).

La funzione verrà utilizzata in questo modo:
Codice:
int main() {
    int dato;
    if (readInt(&dato)!=-1)
        printf("Il valore inserito e': %d", dato);
    else   printf("Hai inserito Ctrl+Z\n");
    return 0;
}
Ti propongo quindi una nuova soluzione: provi a leggere un intero con scanf, se la lettura riesce (cioè scanf ritorna 1) ritorni 1, se invece scanf incontra EOF ritorni -1 e se ritorna 0 leggi un solo carattere e ricominci da capo.
wingman87 è offline   Rispondi citando il messaggio o parte di esso