Buonasera ragazzi ho un piccolo problema...
ecco il codice:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
char scelta_utente,uscita;
float a,b,c,delta,x,x_1,x_2;
main ()
{
menu:
system("color 1a");
printf("Programma per il calcolo di equazioni.\n\n"
"1. Equazioni di primo grado\n"
"2. Equazioni di secondo grado\n"
"3. Credits\n"
"4. Esci\n\n"
"Scelta: ");
scanf("%c",&scelta_utente);
//printf("scelta_utente=%c\n",scelta_utente); /*Funzione di controllo in caso di errori*/
switch(scelta_utente) {
case '1':
primo_grado:
system("CLS");
printf("Hai scelto -Equazione di Primo Grado-\n"
"Secondo la forma generale ax = b\n\n\n\n"
"Inserisci il valore di a: ");
scanf("%f",&a);
//printf("\n\n\na=%.2f\n\n\n",a); /*Funzione di controllo in caso di errori*/
printf("\nAdesso inserisci il valore di b: ");
scanf("%f",&b);
//printf("\n\n\nb=%.2f\n\n\n",b); /*Funzione di controllo in caso di errori*/
system("CLS");
printf("Secondo la forma generale la tua equazione e':\n"
"(%.2f)x = (%.2f)\n\n\n",a,b);
system("PAUSE");
system("CLS");
if(a != 0){
x=b/a;
printf("Secondo la formula risolutiva \t x = b/a \n"
"si ha:\tx = %.2f\n\n\n",x);
system("PAUSE");
menu1:
system("CLS");
printf("Vuoi risolvere un'altra equazione?\n\n"
"1. Si grazie!\n"
"2. No, desidero uscire dal programma.\n\n"
"Scelta: ");
scanf("%c",&uscita);
//printf("\n\nuscita=%c\n\n\n",uscita); /*Funzione di controllo in caso di errori*/
//system("PAUSE"); /*Mette in pausa il programma in modo tale da poter visualizzare il valore*/
/*della variabile uscita, che non sarebbe possibile vedere
per via del system("CLS"); presente nei seguenti casi*/
switch(uscita) {
case '1':
system("CLS");
goto menu;
break;
case '2':
system("CLS");
printf("\n\n\n\n\n\n\n\n\n\n\t\t\t\tArrivederci!");
break;
default:
system("CLS");
printf("\n\n\n\n\n\n\n\n\n\n\t\t\tLa tua scelta non e' valida!"
"\n\n\t\t\t\tRiprova!\n\n\n\n\n\n\n\n\n\n\n\n");
system("PAUSE");
system("CLS");
goto menu1;
break;
}
}
else if(b != 0) {
printf("L'equazione e' impossibile.\n\n\n");
system("PAUSE");
goto menu1;
}
else {
printf("L'equazione e' indeterminata.\n\n\n");
system("PAUSE");
goto menu1;
}
break;
case '2':
system("CLS");
printf("Hai scelto -Equazione di Secondo Grado-\n"
"Secondo la forma generale ax^2 + bx + c = 0\n\n\n\n"
"Inserisci il valore di a: ");
scanf("%f",&a);
//printf("\n\n\na=%.2f\n\n\n",a); /*Funzione di controllo in caso di errori*/
if(a==0) {
system("CLS");
printf("\n\n\n\n\n\n\n\n\n\t\t\tL'equazione e' di primo grado!\n"
"Verrai reindirizzato al programma per "
"risolvere le equazioni di primo grado.\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
system("PAUSE");
goto primo_grado;
}
else if (a!=0) {
printf("\nInserisci il valore di b: ");
scanf("%f",&b);
//printf("\n\nb=%.2f\n\n\n",b); /*Funzione di controllo in caso di errori*/
printf("\nInserisci il valore di c: ");
scanf("%f",&c);
//printf("\n\nc=%.2f\n\n\n",c); /*Funzione di controllo in caso di errori*/
system("CLS");
printf("Secondo la forma generale la tua equazione e':\n"
"(%.2f)x^2 + (%.2f)x + (%.2f) = 0\n\n\n",a,b,c);
system("PAUSE");
system("CLS");
delta=pow(2,b)-4*a*c;
if(delta>0) {
x_1=-b+sqrt(delta);
x_2=-b-sqrt(delta);
printf("L'equazione ha due soluzioni:\n"
"x_1 = %.2f\nx_2 = %.2f\n\n\n",x_1,x_2);
system("PAUSE");
goto menu1;
}
else if(delta==0) {
x_1=-b+sqrt(delta);
x_2=-b-sqrt(delta);
printf("L'equazione ha due soluzioni coincidenti:\n"
"x_1 = %.2f\nx_2 = %.2f\n\n\n",x_1,x_2);
goto menu1;
}
else {
printf("L'equazione e' impossibile.\n\n\n");
system("PAUSE");
goto menu1;
}
}
break;
case '3':
system("CLS");
printf("\n\n\n\n\n\n\n\n\n\n\t\t\tProgramma creato da: Melis Davide"
"\n\t\t\t\tIn data: 10/11/2011\n\n\n\n\n\n\n\n\n\n\n\n\n");
system("PAUSE");
system("CLS");
goto menu;
break;
case '4':
system("CLS");
printf("\n\n\n\n\n\n\n\n\n\n\t\t\t\tArrivederci!");
break;
default:
system("CLS");
printf("\n\n\n\n\n\n\n\n\n\n\t\t\tLa tua scelta non e' valida!"
"\n\n\t\t\t\tRiprova!\n\n\n\n\n\n\n\n\n\n\n\n");
system("PAUSE");
system("CLS");
goto menu;
break;
}
getch ();
}
/* ATTENZIONE!
Per rendere operative le funzioni di controllo cancellare i segni di commento //
che le anticipano.
*/
Comunque il problema sta nel fatto che, quando siamo nel menù di scelta iniziale (o anche nel menu1) e inseriamo un carattere o un numero non previsto dal menù, appare la schermata con scritto "scelta non valida" e poi il goto dovrebbe portarci direttamente al menù iniziale.. e invece questo si ripete
Ho notato inoltre che si ripete una volta in piu' per ogni carattere o numero inserito..
esempio:
se scrivo dopo scelta: 7
il goto si esegue 2 volte
se scrivo 78
il goto si esegue 3 volte e così via...
Il problema è correggibile o è per il fatto che il goto non è un'istruzione molto consigliata??
P.S.
se dichiaro scelta_utente come variabile di tipo intero il goto non si ripete... ma se nel menu di scelta inserisco un carattere il programma ovviamente crasha