Pagina 1 di 1

[C]Esercizi 1.6-1.7 Il linguaggio C K&R[RISOLTO]

Inviato: gio 6 nov 2008, 12:14
da Plaoo
Salve a tutti sto iniziando a studiare il C ho appena acquistato il libro di K&R e pur conoscendo l'informatica teorica (cicli,variabili,funzioni, ecc) leggendo attentamente il libro mi sono fermato a questi esercizi:

1.6 Si verifichi che l' espressione getchar() != EOF abbia valore 0 o1 ho scritto questo:

Codice: Seleziona tutto

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
long c;
while ((c = getchar()) != EOF){
    printf("%1d\n",(getchar()!= EOF));
}

return 0;
}
Sapete dirmi se è giusto??

1.7 Si scriva un programma che visualizzi il valore di EOF io scritto questo:

Codice: Seleziona tutto

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
long c;
while ((c = getchar()) != EOF){
    printf("%1d\n",(getchar()!= EOF));
    printf("%d\n", EOF);
}

return 0;
}
Il problema qua è che EOF vale -1 è giusto??

Scusate la banalità del post ma non posso sapere se quello che ho scritto è giusto non conoscendo affatto il reale valore di EOF nel libro non c'è scritto :?

Re: [C]Esercizi 1.6-1.7 Il linguaggio C K&R

Inviato: gio 6 nov 2008, 13:08
da Mario Vanoni
Plaoo ha scritto:Salve a tutti sto iniziando a studiare il C ho appena acquistato il libro di K&R e pur conoscendo l'informatica teorica (cicli,variabili,funzioni, ecc) leggendo attentamente il libro mi sono fermato a questi esercizi:

1.6 Si verifichi che l' espressione getchar() != EOF abbia valore 0 o1 ho scritto questo:

Codice: Seleziona tutto

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
long c;
while ((c = getchar()) != EOF){
    printf("%1d\n",(getchar()!= EOF));
}

return 0;
}
Sapete dirmi se è giusto??

1.7 Si scriva un programma che visualizzi il valore di EOF io scritto questo:

Codice: Seleziona tutto

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
long c;
while ((c = getchar()) != EOF){
    printf("%1d\n",(getchar()!= EOF));
    printf("%d\n", EOF);
}

return 0;
}
Il problema qua è che EOF vale -1 è giusto??

Scusate la banalità del post ma non posso sapere se quello che ho scritto è giusto non conoscendo affatto il reale valore di EOF nel libro non c'è scritto :?
visto che includi stdio.h
leggiti
/usr/include/stdio.h

Re: [C]Esercizi 1.6-1.7 Il linguaggio C K&R

Inviato: gio 6 nov 2008, 13:12
da paolo86
Intanto direi che usare una variabile di tipo long per i caratteri è un tantino esagerato...
puoi usare al massimo int... comunque è meglio se usi char...
Per stampare il valore di EOF ti bastava fare:

Codice: Seleziona tutto

#include <stdio.h>  //Necessario per la printf

int main()
{
  printf("%d\n", EOF);

  return 0;  //Se la funzione ha un tipo di ritorno non puoi dimenticarti la return
}
Hai dimenticato anche le return e %d è solo per interi... per i long è %ld se non sbaglio, mentre per i caratteri %c...

Ciao!!

Re: [C]Esercizi 1.6-1.7 Il linguaggio C K&R

Inviato: gio 6 nov 2008, 14:56
da kreen
Plaoo ha scritto:1.6 Si verifichi che l' espressione getchar() != EOF abbia valore 0 o 1
Ciao.
Dovresti anche verificare che getchar() != EOF abbia valore 0. Invece nella condizione del while tu cicli finche' è diverso da EOF.

Codice: Seleziona tutto

#include <stdio.h>
#include <stdlib.h>

/* Se vuoi terminare, inviando EOF, premi Ctrl-d */

int main(void)
{
int c = 0;
while (c = (getchar() != EOF)){
    printf("getchar() != EOF ---> %1d\n", c);
}

printf("getchar() == EOF ---> %1d\n", c);

return 0;
}

Re: [C]Esercizi 1.6-1.7 Il linguaggio C K&R

Inviato: gio 6 nov 2008, 18:27
da Plaoo
paolo86 ha scritto:Intanto direi che usare una variabile di tipo long per i caratteri è un tantino esagerato...
puoi usare al massimo int... comunque è meglio se usi char...
Per stampare il valore di EOF ti bastava fare:

Codice: Seleziona tutto

#include <stdio.h>  //Necessario per la printf

int main()
{
  printf("%d\n", EOF);

  return 0;  //Se la funzione ha un tipo di ritorno non puoi dimenticarti la return
}
Hai dimenticato anche le return e %d è solo per interi... per i long è %ld se non sbaglio, mentre per i caratteri %c...

Ciao!!
E' questo l'ho fatto ma mi sembrava strano che il valore di EOF sia -1
kreen ha scritto:

Codice: Seleziona tutto

.../* Se vuoi terminare, inviando EOF, premi Ctrl-d */...
Sapevo che EOF era Ctrl-Z.
Comunque grazie a tutti quelli che mi hanno aiutato, praticamente facevo le cose giuste (non ho postato tutte le prove che ho fatto) mi siete serviti per controllare il mio lavoro grazie ancora :thumbright:

Re: [C]Esercizi 1.6-1.7 Il linguaggio C K&R[RISOLTO]

Inviato: gio 6 nov 2008, 18:46
da kreen
Plaoo ha scritto:Sapevo che EOF era Ctrl-Z.
http://www.mail-archive.com/lin-club@vi ... 00987.html

Ciao e buon studio.