Torna indietro   Hardware Upgrade Forum > Altre Discussioni > Altre discussioni sull'informatica

Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Qrevo Curv 2 Flow è l'ultima novità di casa Roborock per la pulizia di casa: un robot completo, forte di un sistema di lavaggio dei pavimenti basato su rullo che si estende a seguire il profilo delle pareti abbinato ad un potente motore di aspirazione con doppia spazzola laterale
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Abbiamo guidato per diversi giorni la Alpine A290, la prima elettrica del nuovo corso della marca. Non è solo una Renault 5 sotto steroidi, ha una sua identità e vuole farsi guidare
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Abbiamo provato a fondo il nuovo Magic 8 Lite di HONOR, e per farlo siamo volati fino a Marrakech , dove abbiamo testato la resistenza di questo smartphone in ogni condizione possibile ed immaginabile. Il risultato? Uno smartphone praticamente indistruttibile e con un'autonomia davvero ottima. Ma c'è molto altro da sapere su Magic 8 Lite, ve lo raccontiamo in questa recensione completa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 28-12-2011, 22:14   #1
zordan.silvia
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.
zordan.silvia è offline   Rispondi citando il messaggio o parte di esso
Old 29-12-2011, 00:01   #2
hibone
Senior Member
 
L'Avatar di hibone
 
Iscritto dal: Jan 2006
Città: Vergate Sul Membro (MI)
Messaggi: 16538
Quote:
Originariamente inviato da zordan.silvia Guarda i messaggi
#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.
__________________
La favola dell'uccellino
Il lavoro debilita l'uomo
hibone è offline   Rispondi citando il messaggio o parte di esso
Old 29-12-2011, 14:40   #3
demos88
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);
Non dovresti avere più problemi
__________________
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
demos88 è offline   Rispondi citando il messaggio o parte di esso
Old 29-12-2011, 20:12   #4
hibone
Senior Member
 
L'Avatar di hibone
 
Iscritto dal: Jan 2006
Città: Vergate Sul Membro (MI)
Messaggi: 16538
Quote:
Originariamente inviato da demos88 Guarda i messaggi
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);
Non dovresti avere più problemi
chiedo scusa per aver detto una cazzata allora
__________________
La favola dell'uccellino
Il lavoro debilita l'uomo
hibone è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Roborock Qrevo Curv 2 Flow: ora lava con un rullo Roborock Qrevo Curv 2 Flow: ora lava con un rull...
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite Alpine A290 alla prova: un'auto bella che ti fa ...
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile Recensione HONOR Magic 8 Lite: lo smartphone ind...
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Samsung integra Perplexity AI in Galaxy ...
'Una telefonata allunga la vita': lo spo...
Gli smart ring di Oura conquistano Washi...
Windows 10 ESU: Microsoft annuncia l'est...
Game Boy LEGO a 45€: il mito Nintendo an...
Andrea Pignataro supera Giovanni Ferrero...
La Cina vieta i volanti a cloche (yoke) ...
Come dovrebbe essere Task Manager second...
Perché HONOR Magic 8 Lite è...
A soli 149€ Roborock Q7 M5 con 10.000 Pa...
Google Pixel 10 a 563€: Android puro e t...
Altman frena sui datacenter AI orbitali:...
Addio RAM cinese a basso costo: 32 GB DD...
Jony Ive e OpenAI preparano uno smart sp...
Altman difende l'efficienza energetica d...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 11:43.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v