PDA

View Full Version : Errore nell'esecuzione dell'operatore Switch


zordan.silvia
28-12-2011, 22:14
#include<stdio.h>

int main()
{
float a,b;
char operatore;
float somma, prodotto, quoziente, sottrazione;
printf("Inserisci due numeri reali\n");
scanf("%f" "%f", &a, &b);
printf("Inserisci un operatore\n");
scanf("%c", &operatore);
getchar();

switch (operatore)
{
case '+':
somma=a+b;
printf("La somma e': %f", somma);
break;
case '*':
prodotto=a*b;
printf("Il prodotto e': %f", prodotto);
break;
case '/':
quoziente=a/b;
printf("Il quoziente e': %f", quoziente);
break;
case '-':
sottrazione=a-b;
printf("La sottrazione e': %f", sottrazione);
break;
default:
printf("Hai inserito un carattere non consentito\n");
}
getchar();getchar();
return 0;
}


Non capisco dove sia l'errore. Il programma si compila correttamente ma quando vado ad eseguirlo, riesco ad inserire i due numeri ma dopo aver inserito il carattere mi "salta" direttamente al default anche se inserisco un carattere di quelle elencati nei CASE.

hibone
29-12-2011, 00:01
#include<stdio.h>

int main()
{
float a,b;
char operatore;
float somma, prodotto, quoziente, sottrazione;
printf("Inserisci due numeri reali\n");
scanf("%f" "%f", &a, &b);
printf("Inserisci un operatore\n");
scanf("%c", &operatore);
getchar();

switch (operatore)
{
case '+':
somma=a+b;
printf("La somma e': %f", somma);
break;
case '*':
prodotto=a*b;
printf("Il prodotto e': %f", prodotto);
break;
case '/':
quoziente=a/b;
printf("Il quoziente e': %f", quoziente);
break;
case '-':
sottrazione=a-b;
printf("La sottrazione e': %f", sottrazione);
break;
default:
printf("Hai inserito un carattere non consentito\n");
}
getchar();getchar();
return 0;
}


Non capisco dove sia l'errore. Il programma si compila correttamente ma quando vado ad eseguirlo, riesco ad inserire i due numeri ma dopo aver inserito il carattere mi "salta" direttamente al default anche se inserisco un carattere di quelle elencati nei CASE.

la sezione è errata. c'è la sottosezione sulla programmazione.

io è tanto che non programmo in C ma ad occhio e croce il programma interpreta l'operatore come valore numerico mentre nei case hai riportato le stringhe. ricorda che una stringa è un vettore.

la soluzione sbagliata consiste nel togliere le virgolette dai case...
cioè se scrivi

case *

anzichè

case '*'

quando inserisci l'asterisco, senza le virgolette, viene selezionato il case corretto. però in questo caso puoi inserire il codice ascii corrispondente al carattere e il codice funziona ugualmente.

la soluzione corretta prevede che converti operatore in una stringa.

demos88
29-12-2011, 14:40
Nah... l'errore è che dopo il primo scanf, nello stream rimane un newline. E al secondo scanf non viene letto l'operatore ma il newline. Debuggando il codice si nota subito.
Prima dello scanf dell'operatore inserisci un fflush(stdin):

fflush(stdin);
scanf("%c", &operatore);


Non dovresti avere più problemi :)

hibone
29-12-2011, 20:12
Nah... l'errore è che dopo il primo scanf, nello stream rimane un newline. E al secondo scanf non viene letto l'operatore ma il newline. Debuggando il codice si nota subito.
Prima dello scanf dell'operatore inserisci un fflush(stdin):

fflush(stdin);
scanf("%c", &operatore);


Non dovresti avere più problemi :)

chiedo scusa per aver detto una cazzata allora :)