Ultima modifica:
Il problema è abbastanza ingenuo, la causa è molto cospicua (pessimo formatting) che ti porterà a confonderti quando scrivi i codici. Questo è quello corretto:
in sintesi, quando fai una disposizione di codice del genere:
quel `goto latominore;` verrà eseguito indipendentemente e svincolato dall'if, perchè non usi le parentesi graffe. Sintatticamente stai indicando, qualora quella condizione sarà soddisfatta, che eseguirai SOLO una istruzione, in questo caso `printf("Il valore inserito è negativo");`. Perciò, formattandolo correttamente, il codice verrebbe così:
che è quello che non vuoi fare tu, l'istruzione `goto latominore;` dovrebbe essere ragionevolmente eseguita solo se quella condizione è appagata come già ho detto, quindi dobbiamo usare le parentesi graffe per avere più di due istruzioni nell'if statement:
Nota: ti consiglio di lasciar perdere l'uso dei `goto`.
C:
#include <stdio.h>
int main() {
int var1, var2, h;
float area;
printf("calcolo dell'area di un trapezio");
latomaggiore:
printf("\n inserisci il lato maggiore del trapezio... \n");
scanf("%d", & var1);
if (var1 > 0)
printf("il lato maggiore del trapezio vale %d\n", var1);
else if (var1 == 0) {
printf("il lato non puo essere uguale a 0");
goto latomaggiore;
} else if (var1 < 0) {
printf("Il valore inserito è negativo");
goto latomaggiore;
}
latominore:
printf("\n inserisci il lato minore del trapezio... \n");
scanf("%d", & var2);
if (var2 < var1) {
printf("il lato minore del trapezio vale %d\n", var2);
} else if (var2 > var1) {
printf("il valore inserito è piu grande del lato maggiore");
goto latominore;
}
if (var2 == 0) {
printf("il lato non puo essere uguale a 0");
goto latominore;
}
if (var2 < 0) {
printf("Il valore inserito è negativo");
goto latominore;
}
altezza:
printf("\n infine inserisci l'altezza del trapezio... \n");
scanf("%d", & h);
if (h < 0) {
printf("il valore inserito è negativo");
goto altezza;
} else if (h == 0) {
printf("l'altezza non puo essere uguale a 0");
goto altezza;
}
area = (var1 + var2) * h / 2;
printf("l'area del tuo trapezio vale %f", area);
return 0;
}
in sintesi, quando fai una disposizione di codice del genere:
C:
if (var2 < 0)
printf("Il valore inserito è negativo");
goto latominore;
C:
if (var2 < 0)
printf("Il valore inserito è negativo");
goto latominore;
C:
if (var2 < 0)
{
printf("Il valore inserito è negativo");
goto latominore;
}
Nota: ti consiglio di lasciar perdere l'uso dei `goto`.