PDA

Visualizza la versione completa : [C] Programma calcolatrice


MaxPower78
03-05-2010, 19:22
Sono nuovo del linguaggio C e sto provando a fare un "semplice" programma calcolatrice:

/* programma calcolatrice */

#include "stdio.h"

main(){
char x;
int v1 ,v2;
printf("Primo valore: ");
scanf("%d", &v1);
printf("Secondo valore: ");
scanf("%d", &v2);
printf("Scegli l'operazione da effettuare: ");
x = getchar();
switch(x){

case '+': v1 = v1 + v2;
break;

case '-': v1 = v1 - v2;
break;

case '*': v1 = v1 * v2;
break;

case ':': v1 = v1 / v2;
break;

}

printf("Risultato finale: %d\n",v1);
}
Il problema Ŕ che non mi da la possibilitÓ di inserire l'operazione desiderata.
Sono sicuro che c'Ŕ un errore banale, ma essendo nuovo del linguaggio non riesco a trovarlo.
Qualcuno pu˛ aiutarmi?
Grazie mille!

oregon
03-05-2010, 19:53
http://forum.html.it/forum/showthread.php?s=&threadid=1399350&highlight=fflush

MaxPower78
03-05-2010, 20:12
Niente da fare.
Ho provato inserendo:

while((c = getchar()) != EOF && c != '\n');
ma continua a saltarmi la selezione.
Ho provato anche con:

scanf("%c",x);
ma niente da fare.
Altre idee?
Grazie ancora.

jc74
03-05-2010, 20:28
fflush
ammazza sei un fulmine oregon


#include "stdio.h"

main()
{
char x;
float v1,v2,v3=0;
printf("Primo valore: ");
scanf("%f", &v1);
getchar();
fflush(stdin);

printf("Secondo valore: ");
scanf("%f", &v2);
fflush(stdin);
printf("Scegli l'operazione da effettuare: ");
scanf("%c",&x);

fflush(stdin);

switch(x)
{
case '+': v3 = v1 + v2;
break;

case '-': v3 = v1 - v2;
break;

case '*': v3 = v1 * v2;
break;

case ':': v3 = v1 / v2;
break;

}

printf("Risultato finale: %f\n",v3);
fflush(stdin);
getchar();
return 0;
}

scusa ho cambiato qualcosa ma la quetio Ŕ come dice Oregon fflush pulire da invii

antotan
03-05-2010, 20:32
Originariamente inviato da MaxPower78
Niente da fare.
Ho provato inserendo:

while((c = getchar()) != EOF && c != '\n');
ma continua a saltarmi la selezione.
Ho provato anche con:

scanf("%c",x);
ma niente da fare.
Altre idee?
Grazie ancora.

Fai quel while dopo ogni input:



#include "stdio.h"

void clean()
{
char c;
while((c = getchar()) != EOF && c != '\n');
}

int main(){
char x;
int v1 ,v2;
printf("Primo valore: ");
scanf("%d", &v1);
clean();

printf("Secondo valore: ");
scanf("%d", &v2);
clean();

printf("Scegli l'operazione da effettuare: ");
x = getchar();
clean();

switch(x)
{
case '+': v1 = v1 + v2;
break;

case '-': v1 = v1 - v2;
break;

case '*': v1 = v1 * v2;
break;

case ':': v1 = v1 / v2;
break;
}

printf("Risultato finale: %d\n",v1);
}

antotan
03-05-2010, 20:38
Originariamente inviato da jc74
fflush


come ho scritto nell'altro thread, non dovreste mai utilizzare fflush:


int fflush ( FILE * stream );

If the given stream was open for writing and the last i/o operation was an output operation, any unwritten data in the output buffer is written to the file.
If it was open for reading and the last operation was an input operation, the behavior depends on the specific library implementation. In some implementations this causes the input buffer to be cleared, but this is not standard behavior.


fonte: http://www.cplusplus.com/reference/clibrary/cstdio/fflush/

MaxPower78
03-05-2010, 21:26
Innanzitutto grazie a tutti.
Alla fine ho utilizzato il codice di antotan.
A questo punto abuso della vostra disponibilitÓ.
PerchŔ Ŕ necessario invocare questo metodo clean()?
Esattamente cosa fa?
Grazie 1000!

oregon
03-05-2010, 21:32
clean non Ŕ un metodo ma una semplice funzione che svuota il buffer della tastiera.

In questo modo, la successiva chiamata di una funzione di input da tastiera non Ŕ influenzata da ci˛ che si Ŕ pressato prima (il tasto invio, in particolare)

MaxPower78
03-05-2010, 21:44
Mi scuso per l'imprecisione e ringrazio ancora per l'aiuto.

Loading