PDA

Visualizza la versione completa : [C] Calcolatrice tramite switch


Satiro88
20-10-2012, 18:43
Ciao a tutti,stavo provando a realizzare un programma che fungesse da calcolatrice molto elementare,niente elevamenti a potenza per ora.Ho provato usando switch come segue:


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

int main()
{
float a,b,c;
int i;
char y;
char repeat='y';
char o='?';
while(repeat == 'y')
{
while(o!='+' && o!='-' && o!='/' && o!='*')
{
printf("\n Impostare operazione come segue--> operando1 operatore operando2\n");
scanf("%f %c %f",&a,&o,&b);
}
switch(o)
{
case '+':
{
c=a+b;
printf("%f",c);
break;
}
case '-':
{
c=a-b;
printf("%f",c);
break;
}
case '/':
{
c=a/b;
printf("%f",c);
break;
}
case '*':
{
c=a*b;
printf("%f",c);
break;
}
}
printf("\n altre operazioni da eseguire? -->(y/n)<-- \n");
scanf("%c",&repeat);
o='?';
}
system("pause");
return 0;
}

il problema è che svolta la prima operazione lui si limita a stampare il risultato e "altre operazioni da eseguire?" senza aspettare che inserisca nulla fa terminare il programma.Mi viene il dubbio che il problema parta dallo switch,o meglio dal break nello switch,inizialmente pensavo che uscisse direttamente dal primo while,in tal caso non avrei chiaro perchè mi stampa comunque quell'ultimo printf che è comunque all'interno del while....
Grazie mille.

linoma
20-10-2012, 19:40
Dovrebbe essere l'ultimo scanf cn repeat, forse nn ce la y

oregon
21-10-2012, 00:00
Dopo ogni scanf inserisci una linea

while(getchar()!='\n');

per svuotare il buffer

Satiro88
21-10-2012, 11:14
Grazie, altrimenti mi era stato detto di usare %*%c nelle scanf tipo scanf("%f%*c",&pippo), scusa l'ignoranza ma perché parli di svuotare il buffer? Non ho idea di cosa accadrebbe e perché xD

Satiro88
21-10-2012, 14:08
ah cmq mettendo quel %*c funziona è ma non capisco cosa faccia ne tanto meno perchè si debba svuotare il buffer :|

Satiro88
23-10-2012, 11:06
A quanto ho capito il %*c serve semplicemente a dire di ignorare l'ultimo carattere inserito,immagino nel caso in cui come risultato ci ritorni un numero e un carattere,quello che non capisco è perchè ciò permetta al programma di funzionare.....

oregon
23-10-2012, 11:53
Perché l'ultimo carattere ignorato è il '\n' (il ritorno a capo), che è quello che fa la while che ti ho suggerito.

Satiro88
23-10-2012, 12:29
cioè quindi pulisco il buffer eliminando quello che c'era in memoria fino a un attimo fa di modo che possa riconoscere il carattere che metto alla fine?

oregon
23-10-2012, 13:02
No ... pulisco il buffer da tutti i caratteri non utilizzati dall'ultima scanf e che potrebbero essere utilizzati (in maniera inopportuna) dagli input successivi.

Loading