PDA

View Full Version : [C] Problema programma in c


davide.di.paolo
07-11-2013, 18:13
Ho un problema con questo programma, praticamente quando vado ad inserire i nomi della materia e i voti, il programma non va avanti e mi dice solo: premere un tasto per continuare...
Questo programma deve fare la media dei voti, vedere esito (promosso,rimandato,bocciato) e assegnare i punti di credito agli alunni delle classi 3,4 e 5.

#include<stdio.h>
#include<stdlib.h>
#define n 1
#define m 5

int j=0;
int i=0;
int a=0;
int c=0;

struct materie_voti{ char materie[10];
int voto;
}mat_voti[m];

struct studente{ char nome[20];
char cognome[20];
int classe;
float media;
}alunno[n];

void carica()
{for(i=0;i<n;i++)
{printf("inserisci nome: ");
scanf("%s",&alunno[i].nome);
printf("inserisci cognome: ");
scanf("%s",&alunno[i].cognome);
printf("inserisci classe: ");
scanf("%d",&alunno[i].classe);

for(j=0;j<m;j++)
{printf("inserisci nome materia: ");
scanf("%s",&mat_voti[j].materie);
printf("inserisci voto: ");
scanf("%d",&mat_voti[j].voto);
}
}

for(i=0;i<n;i++)
{ a=a+mat_voti[i].voto;
c++;
}
alunno[i].media=a/c;

}

void pri_sec()
{if((alunno[i].classe==1)||(alunno[i].classe==2))
{for(j=0;j<m;j++)
{if(mat_voti[j].voto<=3)
printf("Bocciato");
else{
if((mat_voti[j].voto==4)||(mat_voti[j].voto==5))
printf("Rimandato");
else{
printf("Promosso");
printf("La media dei voti e': %f",alunno[i].media);
}
}
}
}
}

void ter_qua()
{if((alunno[i].classe==3)||(alunno[i].classe==4))
{for(j=0;j<m;j++)
{if(mat_voti[j].voto<=3)
printf("Bocciato");
else{
if((mat_voti[j].voto==4)||(mat_voti[j].voto==5))
printf("Rimandato");
else{
if(alunno[i].media==6)
printf("Promosso con 3 punti di credito");
else{
if((alunno[i].media>6)&&(alunno[i].media<=6.4))
printf("Promosso con 4 punti di credito");
else{
if((alunno[i].media>=6.5)&&(alunno[i].media<=7))
printf("Promosso con 5 punti di credito");
else{
if((alunno[i].media>7)&&(alunno[i].media<=7.4))
printf("Promosso con 5 punti di credito");
else{
if((alunno[i].media>=7.5)&&(alunno[i].media<=8))
printf("Promosso con 6 punti di credito");
else{
if((alunno[i].media>8)&&(alunno[i].media<=8.4))
printf("Promosso con 6 punti di credito");
else{
if((alunno[i].media>=8.5)&&(alunno[i].media<=9))
printf("Promosso con 7 punti di credito");
else{
if((alunno[i].media>9)&&(alunno[i].media<=9.4))
printf("Promosso con 7 punti di credito");
else{
if((alunno[i].media>=9.5)&&(alunno[i].media<=10))
printf("Promosso con 8 punti di credito");
}}}}}}}}}}}}}



void quinto()
{if(alunno[i].classe==5)
{for(j=0;j<m;j++)
{if(mat_voti[j].voto<=5)
printf("Bocciato");
else{
if(alunno[i].media==6)
printf("Promosso con 4 punti di credito");
else{
if((alunno[i].media>6)&&(alunno[i].media<=6.4))
printf("Promosso con 5 punti di credito");
else{
if((alunno[i].media>=6.5)&&(alunno[i].media<=7))
printf("Promosso con 6 punti di credito");
else{
if((alunno[i].media>7)&&(alunno[i].media<=7.4))
printf("Promosso con 6 punti di credito");
else{
if((alunno[i].media>=7.5)&&(alunno[i].media<=8))
printf("Promosso con 7 punti di credito");
else{
if((alunno[i].media>8)&&(alunno[i].media<=8.4))
printf("Promosso con 7 punti di credito");
else{
if((alunno[i].media>=8.5)&&(alunno[i].media<=9))
printf("Promosso con 8 punti di credito");
else{
if((alunno[i].media>9)&&(alunno[i].media<=9.4))
printf("Promosso con 8 punti di credito");
else{
if((alunno[i].media>=9.5)&&(alunno[i].media<=10))
printf("Promosso con 9 punti di credito");
}}}}}}}}}}}}

int main(){
carica();
pri_sec();
ter_qua();
quinto();
system("pause");
}

lorenzo001
07-11-2013, 20:05
Questo tipo di controlli

if((alunno[i].classe==1)||(alunno[i].classe==2))

nelle varie funzioni successive al caricamento, non hanno molto senso perché il valore di i non è corretto.

davide.di.paolo
07-11-2013, 20:17
e quindi come posso risolvere il problema?

lorenzo001
07-11-2013, 20:32
Mi sembrava ovvio ...

Devi correggere il valore di i quando la usi nelle funzioni ...