[C] banalità con while
ciao a tutti, sono alle primissime armi con il c quindi chiedo pietà
ho questo programma
che funziona meravigliosamente e che una volta stampato il risultato termina.
mi si chiede di farlo continuare di modo che l'utente possa inserire nuovi input senza rifar partire l'eseguibile.
il tutto pare potersi fare con il solo while. c'è modo di farlo senza introdurre una domanda del tipo "vuoi continuare" e pedissequa risposta dell'utente?
GRAZIE!

ho questo programma
#include <stdio.h> int main(void) { float a; int operaz; float b; printf ("inserisci il primo numero: "); scanf ("%f", &a); printf ("inserisci l'operazione che vuoi eseguire con\n""addizione\t1\nsottrazione\t2\nmoltiplicazione\t3\ndivisione\t4\n"); scanf ("%d", &operaz); getchar (); printf ("inserisci il secondo numero: "); scanf ("%f", &b); { if (operaz==4 && b==0) printf("operazione impossibile\n"); else switch (operaz) { case 1: printf ("il risultato è %f\n",a+b); break; case 2: printf ("il risultato è %f\n",a-b); break; case 3: printf ("il risultato è %f\n",a*b); break; case 4: printf ("il risultato è %f\n",a/b); break; default: printf ("ERROR: non hai inserito nulla\n"); break; } } return 0; }
che funziona meravigliosamente e che una volta stampato il risultato termina.
mi si chiede di farlo continuare di modo che l'utente possa inserire nuovi input senza rifar partire l'eseguibile.
il tutto pare potersi fare con il solo while. c'è modo di farlo senza introdurre una domanda del tipo "vuoi continuare" e pedissequa risposta dell'utente?
GRAZIE!
Risposte
Puoi aggiungere una operazione nel tuo menù che permette all'utente di terminare il programma.
@mafantuz,
meravigliosamente non sembra funzionare bene... se inserisci da tastiera, nella scelta delle operazioni, il valore intero positivo \( 8 \), il programma continua ad eseguire normalmente una operazione, non sapendo però quale di quelle dell'elenco ..
noto che dopo stampa "ERROR" quindi nessun risultato, ma non ha alcun senso (cioè dopo che ho inserito il secondo valore mi dice che non posso fare l'operazione scelta!? Pensa che io mi ero già bloccato a quando ho inserito \( 8\) senza andare avanti perchè già mi sembrava strano in quel punto, poi spinto dalla curiosità ho fatto il gioco del programma...) ... dovresti riscrivere l'ultima parte un po meglio.. per quanto riguarda la tua richiesta puoi fare così[nota]ho cercato di cambiare poche cose del tuo programma originale.. il problema dell'inserimento dell'operazione lo la lascio a te (sugg.: basta cambiare qualcosa, tipo l'ordine di qualche printf, e sarà corretto anche a livello semantico)[/nota]:
http://pastebin.com/raw.php?i=S5vvnHdN
Saluti
P.S.=Spero di non aver scritto cavolate, è da un anno che non tocco programmazione! Non avete fatto ancora le "chiamate a funzioni"? Se si, allora inserisci tutta la porzione di codice del "case 1" escludendo il "break;" in una funzione a parte.. etc etc..
Semplice curiosità, che compilatore usi?
"mafantuz":
ciao a tutti, sono alle primissime armi con il c quindi chiedo pietà![]()
ho questo programma#include <stdio.h> int main(void) { float a; int operaz; float b; printf ("inserisci il primo numero: "); scanf ("%f", &a); printf ("inserisci l'operazione che vuoi eseguire con\n""addizione\t1\nsottrazione\t2\nmoltiplicazione\t3\ndivisione\t4\n"); scanf ("%d", &operaz); getchar (); printf ("inserisci il secondo numero: "); scanf ("%f", &b); { if (operaz==4 && b==0) printf("operazione impossibile\n"); else switch (operaz) { case 1: printf ("il risultato è %f\n",a+b); break; case 2: printf ("il risultato è %f\n",a-b); break; case 3: printf ("il risultato è %f\n",a*b); break; case 4: printf ("il risultato è %f\n",a/b); break; default: printf ("ERROR: non hai inserito nulla\n"); break; } } return 0; }
che funziona meravigliosamente e che una volta stampato il risultato termina.
mi si chiede di farlo continuare di modo che l'utente possa inserire nuovi input senza rifar partire l'eseguibile.
il tutto pare potersi fare con il solo while. c'è modo di farlo senza introdurre una domanda del tipo "vuoi continuare" e pedissequa risposta dell'utente?
GRAZIE!
meravigliosamente non sembra funzionare bene... se inserisci da tastiera, nella scelta delle operazioni, il valore intero positivo \( 8 \), il programma continua ad eseguire normalmente una operazione, non sapendo però quale di quelle dell'elenco ..

#include <stdio.h> int main (void) { float a; int operaz; float b; int scelta; do { printf("Scelta-1 - Esegui programma"); printf("\n"); printf("Scelta-2 - Esci"); printf("\n"); printf("Fai la tua scelta, Scelta-"); scanf("%d", &scelta); switch(scelta) { case 1: { printf ("Inserisci il primo numero: "); scanf ("%f", &a); printf ("Inserisci l'operazione che vuoi eseguire con\n""addizione\t1\nsottrazione\t2\nmoltiplicazione\t3\ndivisione\t4\n"); scanf ("%d", &operaz); getchar (); printf ("Inserisci il secondo numero: "); scanf ("%f", &b); if(operaz==4 && b==0) { printf("operazione impossibile\n"); } else { switch (operaz) { case 1: printf ("Il risultato e' %f\n",a+b); break; case 2: printf ("Il risultato e' %f\n",a-b); break; case 3: printf ("Il risultato e' %f\n",a*b); break; case 4: printf ("Il risultato e' %f\n",a/b); break; default: printf ("ERROR: non hai inserito nulla\n"); break; } } break; } } } while(scelta !=2); return 0; }
http://pastebin.com/raw.php?i=S5vvnHdN
Saluti
P.S.=Spero di non aver scritto cavolate, è da un anno che non tocco programmazione! Non avete fatto ancora le "chiamate a funzioni"? Se si, allora inserisci tutta la porzione di codice del "case 1" escludendo il "break;" in una funzione a parte.. etc etc..

Questo è un modo per farlo. Nota che ho creato un ciclo infinito da cui esco chiudendo il programma (usando un return). Nel caso in cui il ciclo sia seguito da qualcosa allora questo metodo non va bene ma per casi di questo tipo direi che va bene. Nel caso in cui tu voglia evitare il return puoi usare un break.
Ho usato puts il più delle volte. Puts è simile a printf ma stampa stringhe e non permette di inserire il valore delle variabili, inoltre ti mette automaticamente “\n” alla fine della stringa. Il vantaggio è che, al contrario di printf, non ti cerca nella stringa “%d” e similari. Ho inoltre usato fputs quando non volevo aggiungere “\n”. Fputs ti permette inoltre di decidere dove stampare la stringa (insomma a video o in un file).
È evidente inoltre che usando le chiamate a funzioni si migliora lo stile e l'ordine del codice.
Ho usato puts il più delle volte. Puts è simile a printf ma stampa stringhe e non permette di inserire il valore delle variabili, inoltre ti mette automaticamente “\n” alla fine della stringa. Il vantaggio è che, al contrario di printf, non ti cerca nella stringa “%d” e similari. Ho inoltre usato fputs quando non volevo aggiungere “\n”. Fputs ti permette inoltre di decidere dove stampare la stringa (insomma a video o in un file).
È evidente inoltre che usando le chiamate a funzioni si migliora lo stile e l'ordine del codice.
#include <stdio.h> int main() { while(1) { puts("Calcolatrice pronta a calcolare una nuova operazione"); puts("Che operazione vuoi eseguire? Premi..."); puts("-1\t per uscire dalla calcolatrice"); puts("0\t per l'addizione"); puts("1\t per la sottrazione"); puts("2\t per la moltiplicazione"); puts("3\t per la divisione"); int op = -1; fputs("Comando: ",stdout); scanf("%d", &op); puts(""); if(op == -1) return 0; float a, b, r; switch (op) { case 0: fputs("Inserisci i due addendi: ", stdout); scanf("%f %f", &a, &b); r = a+b; puts(""); printf("Il risultato e' %f\n", r); break; case 1: fputs("Inserisci i due addendi: ", stdout); scanf("%f %f", &a, &b); r = a-b; puts(""); printf("Il risultato e' %f\n", r); break; case 2: fputs("Inserisci i due fattori: ", stdout); scanf("%f %f", &a, &b); r = a*b; puts(""); printf("Il risultato e' %f\n", r); break; case 3: fputs("Inserisci numeratore e denominatore: ", stdout); scanf("%f %f", &a, &b); r = a/b; puts(""); printf("Il risultato e' %f\n", r); break; default : puts("Il valore inserito non è valido"); } } }