[RISOLTO] Info su esercizio con EOF e getchar()/putchar()

di il
7 risposte

[RISOLTO] Info su esercizio con EOF e getchar()/putchar()

Ciao a tutti,

ho alcuni dubbi in riferimento al seguente programma:

#include <stdio.h>

main()
{
int c;

c = getchar();

while(c = getchar() != EOF)
{
putchar(c); 
printf("\n");
printf("valore di c: %d\n", c);
fflush(stdin); 
printf("\n EOF = %d \n", EOF);
c = getchar();
}

printf("fine programma");
fflush(stdin);
getchar();

} 
ho fatto un pò di prove per verificare il valore e funziomento dell'EOF ecc, tutto ok.

Domande:

il testo su cui stò studiando mi dice:

"verifica che l'espressione getchar() != EOF abbia valore 0 o 1"

Poichè non ho usato le parentesi, nel modo corretto -> while((c = getchar()) != EOF)
"!=" ha priorità sul resto e quindi "c" assume il valore 1.
Ma quali sono i casi in cui potrebbe assumere il valore 0 ?

Domanda 2: facendo il debug, dopo putchar(c); nella shell viene stampata una faccina.
Come mai ?

Grazie

7 Risposte

  • Re: [RISOLTO] Info su esercizio con EOF e getchar()/putchar()

    Non ho capito la domanda .... se hai usato le parentesi in modo non corretto, perché non le correggi?

    Perché tutte quelle getchar?
  • Re: [RISOLTO] Info su esercizio con EOF e getchar()/putchar()

    Lo scopo della stringa, volutamente, errata è didattico...
    rilevare il valore assunto da "c" che dal testo sembrerebbe poter essere 0 o 1.

    Il caso in cui da 1 è nel codice postato, non riuscendo a trovare il caso in cui da 0
    mi domandavo
    a) se esiste
    b) quali sono questi casi.

    La domanda 2 mi sembra chiara.

    "Perché tutte quelle getchar?" sto facendo solo dei test...
  • Re: [RISOLTO] Info su esercizio con EOF e getchar()/putchar()

    Come hai detto tu, l'operatore != ha precedenza sul resto: pertanto l'espressione diventa:
    c = (getchar() != EOF)
    A questo punto, per capire se c avrà valore 1 o 0, devi semplicemente valutare l'espressione di confronto.
    Quando assume valore 0 (ovvero false)? Quando invece assume valore 1 (true)?
  • Re: [RISOLTO] Info su esercizio con EOF e getchar()/putchar()

    Grazie Tuixte,

    mi sono perso in un bicchier d'acqua.... certo : 0 (false) 1 (true)..che pollo !!

    Che tu sappia c'è modo di visualizzare il valore 0 e 1 dell'espressione durante il debug ?
    Intendo dire,( io uso DevC++ come IDE) come quando si usa una variabile
    e nella funzione "nuova osservazione" indichi il nome della variabile.
    Poi durante il debug si vede la variazione del valore. Spero di essermi spiegato.


    Oppure magari con una printf... azzardo

    Grazie
  • Re: [RISOLTO] Info su esercizio con EOF e getchar()/putchar()

    tuixte ha scritto:


    Come hai detto tu, l'operatore != ha precedenza sul resto: pertanto l'espressione diventa:
    c = (getchar() != EOF)
    A questo punto, per capire se c avrà valore 1 o 0, devi semplicemente valutare l'espressione di confronto.
    Quando assume valore 0 (ovvero false)? Quando invece assume valore 1 (true)?
    a me esce sempre 1.. cioè sempre diverso anche se do come input -1.. come mai?
  • Re: [RISOLTO] Info su esercizio con EOF e getchar()/putchar()

    Ciao,

    probabilmente sono l'ultima persona del forum che dovrebbe risponderti,
    per cui prendi quello che ti dico con le pinze !

    Visto che hai preso in carico un esempio di codice postato da me,
    cominciamo a considerare la condizione while corretta, ovvero:
    while( (c = getchar() ) != EOF )
    altrimenti rischiamo di partire male.

    La condizione del while dice: finchè in c c'è un valore diverso da -1,
    ovvero EOF, esegui quello che c'è tra { ...}.
    La condizione in while assumerà valore 1, ovvero vera (true), sempre, ad eccezione del
    caso in cui digiti ctrl+z.
    In quest'ultimo caso c sarà = -1 quindi la condizione in while è falsa, ovvero 0, e si esce
    dal ciclo.

    Non serve che tu dia -1, perchè il compilatore analizza un carattere alla volta e quindi
    legge prima "-", poi "1".

    Spero di essere stato chiaro, ma soprattutto corretto.

    Ciao
  • Re: [RISOLTO] Info su esercizio con EOF e getchar()/putchar()

    Chiarissimo, ti ringrazio x la spiegazione
Devi accedere o registrarti per scrivere nel forum
7 risposte