Sto impazzendo -_- Problema file TXT C

di il
1 risposte

Sto impazzendo -_- Problema file TXT C

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 ???

1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte