|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Dec 2011
Città: Siena
Messaggi: 2
|
Errore nell'esecuzione dell'operatore Switch
#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. |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Jan 2006
Città: Vergate Sul Membro (MI)
Messaggi: 16538
|
Quote:
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. |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
|
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): Codice:
fflush(stdin);
scanf("%c", &operatore);
__________________
CPU Ryzen 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / Headset Kingston HyperX Flight |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jan 2006
Città: Vergate Sul Membro (MI)
Messaggi: 16538
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:43.




















