Ragazzi vi pongo il seguente algoritmo, non ci sono errori sintattici ma il programma crasha dopo aver letto il nome da file, ve lo mostro:
#include <stdio.h>
#include <stdlib.h>
typedef struct dati {
int giorno;
char tipo_gara[20];
int finale;} olimpiadi;
void leggi_file(olimpiadi *p, int n_l);
void output(olimpiadi *p);
int main (){
int n_l;
olimpiadi *p;
leggi_file(p,n_l);
output(p);
free(p);
system("PAUSE");
}
void leggi_file(olimpiadi *p, int n_l){
FILE *f;
char c,nomefile[20];
int i,tmp;
printf("Inserisci il nome del file: ");
scanf("%s",&nomefile);
f=fopen(nomefile,"r");
if(f==NULL){
printf("Impossibile aprire il file");
exit(1);
}
else{
p=(olimpiadi*)malloc(16*sizeof(olimpiadi));
for(i=0;i<16;i++){
fscanf(f,"%d",tmp);
if(tmp==10+i){
fscanf(f,"%d",p[i].giorno);
fscanf(f,"%s",p[i].tipo_gara);
fscanf(f,"%d",p[i].finale);
}
else{
}
}
}
fclose(f);
}
void output(olimpiadi *p){
int i;
for(i=0;i<16;i++){
if(p[i].tipo_gara==NULL)
printf("%d nessuna competizione interessante",p[i].giorno);
else{
printf("%d %s %d ",p[i].giorno,p[i].tipo_gara,p[i].finale);
}
}
}
Il testo è questo:
Il programma riceve come primo argomento sulla linea di comando il nome del file contenente
il calendario delle gare e deve produrre in output un elenco in cui, per ogni giorno
(in ordine da 10 e 26), si suggerisca all’utente quale disciplina guardare in TV. La disciplina
suggerita deve essere scelta secondo le seguenti regole:
1. se in un determinato giorno vi è una sola disciplina, indicare quella
2. se in un determinato giorno vi sono due o più discipline in parallelo, ne verrà scelta
una arbitrariamente dal programma
3. se in un determinato giorno non vi sono discipline, si scriva “niente di interessante”
Manca qualche punto della traccia, ma piuttosto vorrei capire come mai crasha. Inoltre ho sempre problemi circa la lettura di caratteri da file, l'avevo già esposto in un altro tread D: