[C] banalità con while

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!

Risposte
apatriarca
Puoi aggiungere una operazione nel tuo menù che permette all'utente di terminare il programma.

garnak.olegovitc1
@mafantuz,

"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 .. :roll: 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]:

#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.. :wink: Semplice curiosità, che compilatore usi?

vict85
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.

#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");
      }
   }
}

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.