PDA

View Full Version : [ c ] Problemino facile facile


dottorkame
22-11-2003, 17:12
Ciao a tutti premetto che ho da poco cominciato a prog. in c, quindi non mi insultate per questo mio prob.

ho creato questo semplice prog:

-----------------------------------------------------------------------------------

#include <stdio.h>

int num1, num2;
char op;
main ()
{ printf ("inserisci il primo numero \n");
scanf("%d", &num1);
printf ("inserisci l' operatore \n");
op = getchar();
printf ("inserisci il secondo numero \n");
scanf("%d", &num2);

if ( op == '+' ) printf(" La somma dei 2 numeri e'", num1 + num2 );
if ( op == '-' ) printf(" La differenza dei 2 numeri e'", num1 - num2 );
if ( op == '*' ) printf(" il prodotto dei 2 numeri e'", num1 * num2 );
if ( op == '/' ) printf(" La somma dei 2 numeri e'", num1 / num2 );
}

_____________________________________________________

Quando compila non mi da errori, quando lo eseguo

stampa
inserisco il primo numero
stampa
non mi fa inserire l' operatore e stampa subito il messaggio dopo
inserisco il secondo numero ed esce.

Mi spiegate dove sta l' errore? grazie

cionci
22-11-2003, 17:56
Sostituisci getchar con scanf("%c", &op);

dottorkame
22-11-2003, 18:48
non funziona ho gia provato:muro:

bizzu
22-11-2003, 19:23
Cosa succede quando usi lo scanf? Ti da lo stesso problema di prima o qualcos'altro?

cionci
22-11-2003, 19:51
Prova così:

#include <stdio.h>

int num1, num2;
char op;
main ()
{ printf ("inserisci il primo numero \n");
scanf("%d", &num1);
printf ("inserisci l' operatore \n");
fflush(stdin);
scanf("%c", &op);
printf ("inserisci il secondo numero \n");
scanf("%d", &num2);

if ( op == '+' ) printf(" La somma dei 2 numeri e'", num1 + num2 );
if ( op == '-' ) printf(" La differenza dei 2 numeri e'", num1 - num2 );
if ( op == '*' ) printf(" il prodotto dei 2 numeri e'", num1 * num2 );
if ( op == '/' ) printf(" La somma dei 2 numeri e'", num1 / num2 );
}

dottorkame
22-11-2003, 21:37
Funziona!
mi puoi dire qual' era il prob?

SirKhaas
22-11-2003, 23:51
Mi permetto di inserirmi e rispondere io...

Dopo le operazioni di lettura spesso restano dei caratteri, come l'invio, nel buffer di lettura, e se questo non viene pulito, come con la fflush proposta o con altre funzioni, vengono lette dall'istruzione di lettura successiva...
Probabilmente la tua scanf("%c") o getchar() leggeva l'invio premuto per inserire il primo numero...

Io a scuola x evitare problemi la pulizia del buffer la faccio sempre, dopo ogni lettura, anche se non ce ne sono di immediatamente successive...

cionci
23-11-2003, 14:57
Sì...Il fatto è che per getchar e scanf con %c lo \n che rimane nel buffer di input è un carattere valido...mentre per la scanf fatta con altri formati lo \n non è un carattere valido...

fflush pulisce lo standard input...