View Full Version : [c] aiuto programma
razzoman
07-06-2013, 17:35
ciao a tutti devo fare un programma che legga da file il nome cognome dei prof e le statistiche del superamento dell'esame,quale semestre è la materie e i crediti es:
mario rossi informatica 1(semestre) 10(crediti) 40(% superamento)
ora io ho provato a fare il programma,codeblock non mi da errori ma avviandolo mi da errore,sto impazzendo(è da 3 giorni che ci provo) ecco il codice
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct uni
{
char materia[20];
char nome[20];
char cognome[20];
int periodo;
int crediti;
int perc_sup;
} uni;
int main(int argc, char *argv[])
{
uni prof[80];
int i=0,j,p,max;
FILE *fp;
fp = fopen(argv[1],"r");
while(!feof(fp))
{
fscanf(fp,"%s%s%s%d%d%d",prof[i].nome,prof[i].cognome,prof[i].materia,&prof[i].periodo,&prof[i].crediti,&prof[i].perc_sup);
p= i++;
}
max=prof[0].crediti;
for(j=0; j<=p; j++)
{
if(max<prof[j].crediti)
{
max= prof[j].crediti;
}
}
printf("la materia cn più crediti è%s",prof[j].materia);
return 0;
}
per favore aiutatemi
razzoman
07-06-2013, 20:48
è buona norma controllare che l'apertura del file è andata a buon fine, altrimenti rischi di dereferenziare un null pointer... quindi aggiungi un if(!fp) print something and exit per essere sicuro che non è lì il problema...
Provo subito e ti dico
razzoman
07-06-2013, 20:54
Provo subito e ti dico
Fatto mi dice programma non validow85088
razzoman
07-06-2013, 23:37
"programma non valido" è la stringa nella printf che hai aggiunto, vero? Non riesci ad aprire il file, quindi probabilmente non stai dando il percorso corretto oppure il file non è presente all'interno della cartella di lavoro dell'eseguibile.
Ora va, o meglio si avvia peró non mi da la materia ne altro, mi mette solo parole random
razzoman
08-06-2013, 09:12
prova ad aggiungere \n alla fine della stringa di formato. se è possibile prova ad usare il debugger step by step. altrimenti quando ho un pò di tempo provo a farlo girare.
Grazie mille provo a farle e ti faccio sapere
tecno789
08-06-2013, 13:16
non hai descritto bene cosa deve fare il programma, ma se devi stampare i crediti e così :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 3
typedef struct uni
{
char materia[20];
char nome[20];
char cognome[20];
int periodo;
int crediti;
int perc_sup;
} uni;
int main(int argc, char *argv[])
{
uni prof[N];
int i=0;
int max=0;
FILE *fp;
if(argc<2){
fprintf(stderr,"Errore apertura file \n");
exit(EXIT_FAILURE);
}
fp = fopen(argv[1],"r");
while(!feof(fp))
{
fscanf(fp,"%s%s%s%d%d%d",prof[i].nome,prof[i].cognome,prof[i].materia,&prof[i].periodo,&prof[i].crediti,&prof[i].perc_sup);
i++;
}
for(i=0;i<N;i++)
{
if(prof[i].crediti>prof[i+1].crediti)
{
max= prof[i].crediti;
}
max=prof[i].crediti;
}
printf("La materia con piu' crediti e' quella con %d \n",max);
return 0;
}
razzoman
08-06-2013, 13:44
non hai descritto bene cosa deve fare il programma, ma se devi stampare i crediti e così :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 3
typedef struct uni
{
char materia[20];
char nome[20];
char cognome[20];
int periodo;
int crediti;
int perc_sup;
} uni;
int main(int argc, char *argv[])
{
uni prof[N];
int i=0;
int max=0;
FILE *fp;
if(argc<2){
fprintf(stderr,"Errore apertura file \n");
exit(EXIT_FAILURE);
}
fp = fopen(argv[1],"r");
while(!feof(fp))
{
fscanf(fp,"%s%s%s%d%d%d",prof[i].nome,prof[i].cognome,prof[i].materia,&prof[i].periodo,&prof[i].crediti,&prof[i].perc_sup);
i++;
}
for(i=0;i<N;i++)
{
if(prof[i].crediti>prof[i+1].crediti)
{
max= prof[i].crediti;
}
max=prof[i].crediti;
}
printf("La materia con piu' crediti e' quella con %d \n",max);
return 0;
}
Ho provato anche il tuo ma non va, ho provato anche a rifare il mio ma senza risultati
tecno789
08-06-2013, 13:47
Ho provato anche il tuo ma non va, ho provato anche a rifare il mio ma senza risultati
ma glielo passi il file da riga di comando?
razzoman
08-06-2013, 13:50
ma glielo passi il file da riga di comando?
Sisi guarda85092 e il file lo metto nella cartella del programma
razzoman
08-06-2013, 13:55
ma glielo passi il file da riga di comando?
Sono un pirla il tuo programma va, come un beota nn mettevo il percorso del file edit: devo mettere il nome della materia nn i crediti riedit: ce l ho fatta:D ( oddio ce l avete), grazie mille, solo una cosa perchè hai messo n=3?
tecno789
09-06-2013, 09:33
Sono un pirla il tuo programma va, come un beota nn mettevo il percorso del file edit: devo mettere il nome della materia nn i crediti riedit: ce l ho fatta:D ( oddio ce l avete), grazie mille, solo una cosa perchè hai messo n=3?
niente era per fare una prova...puoi modificarlo come vuoi quel valore...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.