Dovrebbe essere un semplice schedario che raccoglie i dati di un gruppo di studenti, ma non riesco a fargli fare una lettura e scrittura corretta. Il programma si interrompe appena prova a leggere il file.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Studenti{
char Nome[30];
char Cognome[30];
char Specializzazione[30];
char classe[3];
int matricola;
char fine[1];
};
struct Studenti accesso;
FILE *fp;
void carica();//Carica la struttura
void Leggi();
void scrivi();
void Ricerca();
void Modifica();
void Cancella();
int menu(int flag);
int main()
{
int scelta;
int risposta;
int a=0;
do
{
scelta=menu(a);
switch(scelta)
{
case 1:
Leggi();
break;
case 2:
scrivi();
break;
case 3:
Ricerca();
break;
/*case 4:
Modifica();
break;
case 5:
Cancella();
break;*/
default:
printf("Scelta errata\n");
}
printf("Digita 1 per continuare\n");
scanf("%d",&risposta);
system("cls");
}while(risposta==1);
system("PAUSE");
return 0;
}
void Leggi()
{
if(fp!=NULL)
{
fp=fopen("Schedario.txt","r");
printf("Nome Cognome Specializzazione Classe Matricola \n");
while(!feof(fp))
{
fscanf(fp,"%s",accesso.Nome);
fscanf(fp,"%s",accesso.Cognome);
fscanf(fp,"%s",accesso.Specializzazione);
fscanf(fp,"%s",accesso.classe);
fscanf(fp,"%d",accesso.matricola);
printf("%s %s %s %s %d\n",accesso.Nome,accesso.Cognome,accesso.Specializzazione,accesso.classe,accesso.matricola);
}
fclose(fp);
}
else
{
printf("Il file e' vuoto o non esiste");
}
return;
}
void scrivi()
{
if(fp==NULL)
{
printf("Il file non esiste, perciò verrà creato\n");
fp=fopen("Schedario.txt","w");
carica();
fprintf(fp,"%s %s %s %s %d\n",accesso.Nome,accesso.Cognome,accesso.Specializzazione,accesso.classe,accesso.matricola);
}
else
{
printf("Il file esiste, i nuovi dati verrano scritti dopo i vecchi\n");
carica();
fprintf(fp,"%s %s %s %s %d\n",accesso.Nome,accesso.Cognome,accesso.Specializzazione,accesso.classe,accesso.matricola);
}
return;
}
void carica()
{
printf("Nome: ");
scanf("%s",accesso.Nome);
printf("Cognome: ");
scanf("%s",accesso.Cognome);
printf("Specializzazione: ");
scanf("%s",accesso.Specializzazione);
printf("Classe: ");
scanf("%s",accesso.classe);
printf("Matricola: ");
scanf("%d",accesso.matricola);
accesso.fine[0]='*';
}
void Ricerca()
{
int a;
int new_scelta;
int b=1;
char appoggio[30];
char C_file[30];
new_scelta=menu(b);
switch(new_scelta)
{
case 1:
printf("Hai scelto ricerca per cognome\nInserisci cognome: ");
scanf("%s",appoggio);
break;
case 2:
printf("Hai scelto ricerca per nome\nInserisci nome: ");
scanf("%s",appoggio);
break;
case 3:
printf("Hai scelto ricerca per specializzazione\nInserisci specializzazione: ");
scanf("%s",appoggio);
break;
default:
printf("Scelta errata");
}
while(!feof(fp))
{
fscanf(fp,"%s",C_file);
a=strcmp(C_file,appoggio);
printf("Elenco: \n");
if(a==0)
{
fscanf(fp,"%s",accesso.Nome);
fscanf(fp,"%s",accesso.Cognome);
fscanf(fp,"%s",accesso.Specializzazione);
fscanf(fp,"%s",accesso.classe);
fscanf(fp,"%d",accesso.matricola);
printf("%s %s %s %s %d\n",accesso.Nome,accesso.Cognome,accesso.Specializzazione,accesso.classe,accesso.matricola);
}
}
return;
}
int menu(int flag)
{
int risp_menu;
if(flag==0)
{
printf("1)Visualizza elenco completo\n2)Inserisci uno studente all'elenco\n3)Ricerca nell'elenco\n");
printf("4)Modifica dati dell'elenco\n5)Cancella uno studente dall'elenco\n");
scanf("%d",&risp_menu);
}
if(flag==1)
{
printf("1)Ricerca per cognome\n2)Ricerca per nome\n3)Ricerca per specializzazione\n");
scanf("%d",&risp_menu);
}
return risp_menu;
}
Perchè non funziona correttamente ???