Salve a tutti,
ho notato uno strano errore in uno statement switch annidato in un ciclo for.
// ciclo che raddoppia le variabili scelte
#include <stdio.h>
int main(void)
{
int product = -1, coffee = 0, tea = 0, cream = 0, sugar = 0;
printf("Choice (1-4, 0 to exit):\n");
selection:
for (;product != 0;)
{
scanf("%d", &product);
switch (product) {
case 1: ++coffee;
break;
case 2: ++tea;
break;
case 3: ++cream;
break;
case 4: ++sugar;
break;
case 0: break;
default: printf("\nInvalid choice\n");
goto selection;
}
//printf("\n**Coffee=%dTea=%dSugar=%dCream=%d\n", coffee, tea, cream, sugar);
}
printf("\nCoffee=%d, Tea=%d, Sugar=%d, Cream=%d\n", coffee, tea, cream, sugar);
return 0;
}
Nel ciclo switch si puó far incrementare delle variabili. Uscendo dal ciclo for, peró, tutte le variabili superiori a 0 risultano raddoppiate!! Come mai?
Ho notato, inoltre, che se aggiungo un qualsiasi statement al ciclo for, il programma funziona normalmente (vedi codice seguente):
// ciclo che funziona correttamente
#include <stdio.h>
int main(void)
{
int product = -1, coffee = 0, tea = 0, cream = 0, sugar = 0;
printf("Choice (1-4, 0 to exit):\n");
selection:
for (;product != 0;)
{
scanf("%d", &product);
switch (product) {
case 1: ++coffee;
break;
case 2: ++tea;
break;
case 3: ++cream;
break;
case 4: ++sugar;
break;
case 0: break;
default: printf("\nInvalid choice\n");
goto selection;
}
printf("\n**Coffee=%dTea=%dSugar=%dCream=%d\n", coffee, tea, cream, sugar);
}
printf("\nCoffee=%d, Tea=%d, Sugar=%d, Cream=%d\n", coffee, tea, cream, sugar);
return 0;
}
Mi sto scervellando da un giorno su questo strano bug ma non riesco a venirne a capo (sono un principiante)