Salve, ragazzi.
E' la prima volta che posto su questo forum.
Ho iniziato ieri a programmare in C, ed oggi ho scritto questo semplice programmino che memorizza fino a 20 voti per tre materie (matematica, italiano e inglese) e permette di aggiungerne e di eliminarne.
Ora, non so perché, quando vado ad aggiungere il primo voto alla materia Italiano, questo viene memorizzato anche per la materia Matematica.
Stesso discorso è per la materia Inglese, per quella Italiano.
Ho analizzato il codice più volte, ma non riesco a comprendere la causa di questo problema...
Potete aiutarmi?
Ecco il codice:
#include <stdio.h>
main ()
{
int i;
int mate=0;
int ita=0;
int ing=0;
// Dichiarazione della struct
struct voti
{
int matematica[19];
int italiano[19];
int inglese[19];
};
struct voti alunno;
// Azzeramento degli array
for (i=0; i<20; i++)
{
alunno.matematica[i]=0;
alunno.italiano[i]=0;
alunno.inglese[i]=0;
}
i=0;
// Menu principale
label:
printf("Questo programma permette la registrazione di voti in tre materie. \n");
printf("1. Visualizza voti \n");
printf("2. Aggiungi voti \n");
printf("3. Elimina voti \n");
printf("0. Esci. \n");
scanf("%d",&i);
switch(i) {
case 1:
goto visualizza_voti;
case 2:
goto aggiungi_voti;
case 3:
goto elimina_voti;
case 0:
goto label2;
default:
printf("Digitare 1, 2, 3 o 0. \n");
goto label;
}
// 1.Visualizza voti
visualizza_voti:
printf("Visualizza voti \n");
printf("Matematica: ");
int c;
for (c=0; c<20; c++)
{
if(alunno.matematica[c]!=0)
printf("%d ",alunno.matematica[c]);
}
printf("\nItaliano: ");
for (c=0; c<20; c++)
{
if(alunno.italiano[c]!=0)
printf("%d ",alunno.italiano[c]);
}
printf("\nInglese: ");
for (c=0; c<20; c++)
{
if(alunno.inglese[c]!=0)
printf("%d ",alunno.inglese[c]);
}
printf("\n");
goto label;
// 2.Aggiungi voti
aggiungi_voti:
printf("Aggiungi voti \n");
printf("Selezionare la materia: \n");
printf("1. Matematica \n");
printf("2. Italiano \n");
printf("3. Inglese \n");
printf("0. Torna al menu \n");
scanf("%d",&i);
switch(i) {
case 1:
{
if(mate!=20)
{
printf("Voto: ");
scanf("%d",&i);
if(i==0)
{
printf("Impossibile registrare il voto '0'. \n");
goto aggiungi_voti;
}
alunno.matematica[mate]=i;
mate++;
goto aggiungi_voti;
}
else
printf("Sono stati già registrati 20 voti. Impossibile registrarne altri. \n");
goto label;
}
case 2:
{
if(ita!=20)
{
printf("Voto: ");
scanf("%d",&i);
if(i==0)
{
printf("Impossibile registrare il voto '0'. \n");
goto aggiungi_voti;
}
alunno.italiano[ita]=i;
ita++;
goto aggiungi_voti;
}
else
printf("Sono stati già registrati 20 voti. Impossibile registrarne altri. \n");
goto label;
}
case 3:
{
if(ing!=20)
{
printf("Voto: ");
scanf("%d",&i);
if(i==0)
{
printf("Impossibile registrare il voto '0'. \n");
goto aggiungi_voti;
}
alunno.inglese[ing]=i;
ing++;
goto aggiungi_voti;
}
else
printf("Sono stati già registrati 20 voti. Impossibile registrarne altri. \n");
goto label;
}
case 0:
goto label;
default:
printf("Digitare 1, 2, 3 o 0. \n");
goto aggiungi_voti;
}
// 3.Elimina voti
elimina_voti:
printf("Elimina voti \n");
printf("Selezionare la materia: \n");
printf("1. Matematica \n");
printf("2. Italiano \n");
printf("3. Inglese \n");
printf("0. Torna al menu \n");
scanf("%d",&i);
switch(i) {
case 1:
{
for (i=0; i<20; i++)
{
alunno.matematica[i]=0;
}
i=0;
mate=0;
goto elimina_voti;
}
case 2:
{
for (i=0; i<20; i++)
{
alunno.italiano[i]=0;
}
i=0;
ita=0;
goto elimina_voti;
}
case 3:
{
for (i=0; i<20; i++)
{
alunno.inglese[i]=0;
}
i=0;
ing=0;
goto elimina_voti;
}
case 0:
goto label;
default:
printf("Digitare 1, 2, 3 o 0. \n");
goto elimina_voti;
}
label2:;
}
Vi ringrazio in anticipo.