salve ho realizzato questo programma in C , però quando vado ad inserire il nome del file, il file non viene letto e viene stampato "errore file". Come posso risolvere? Grazie.
codice:/*leggere nome file di testo, acquisire nome cognome e media da file di testo, * *e stampare gli studenti in ordine crescente in base alla loro media*/ #include <stdlib.h> #include <stdio.h> #include <string.h> #define DIM 50 #define LUN 15 #define SALT 1 void AcquisireFileDiTesto(FILE **fp,char nome[DIM],char Vett1[DIM][LUN],float Vett2[DIM]); void RiempireSpaziVuotiVett2(float Vett2[DIM]); void CompattaVett1(char Vett1[DIM][LUN]); void StampaInOrdineCrescenteDegliStudenti(char Vett1[DIM][LUN],float Vett2[DIM]); int TrovaPosizioneMinimo(float Vett2[DIM]); int main(){ FILE *fp; char nome[DIM]; char Vett1[DIM][LUN]; float Vett2[DIM]; printf("Inserisci il nome del file di testo (compreso di estensione) che vuoi aprire\n"); scanf("%s",nome); AcquisireFileDiTesto(&fp,nome,Vett1,Vett2); CompattaVett1(Vett1); StampaInOrdineCrescenteDegliStudenti(Vett1,Vett2); system("pause"); return 0; } void AcquisireFileDiTesto(FILE **fp,char nome[DIM],char Vett1[DIM][LUN],float Vett2[DIM]){ char fine; int i = 0; int j = 0; *fp = fopen(nome,"r"); if (*fp == NULL){ printf("errore file"); } while (fscanf(*fp,"%c",&fine) != '0' ) { fscanf(*fp,"%s %s %f\n",Vett1[i],Vett1[i+1],&Vett2[j]); //nome cognome media i = i + 1; j = j + 2; } fclose(*fp); Vett1[i][0] = '0'; Vett2[i] = 0; RiempireSpaziVuotiVett2(Vett2); } void RiempireSpaziVuotiVett2(float Vett2[DIM]){ int i = 0; while(Vett2[i] != 0){ if (i%2 == 1){ Vett2[i] = 1; } i = i + 1; } } void CompattaVett1(char Vett1[DIM][LUN]){ int i = 0; while(strcmp(Vett1[i],"0") != 0 ){ strcat(Vett1[i],Vett1[i+1]); i = i + 2; } Vett1[i][0] = '0'; } void StampaInOrdineCrescenteDegliStudenti(char Vett1[DIM][LUN],float Vett2[DIM]){ int i = 0; int j = 0; int pos; while(strcmp(Vett1[i],"0") != 0 ){ pos = TrovaPosizioneMinimo(Vett2); printf("%s %f\n",Vett1[pos+j],Vett2[pos]); Vett2[pos] = SALT; i = i + 1; j = j + 2; } } int TrovaPosizioneMinimo(float Vett2[DIM]){ int i; int j = 0; int min = Vett2[j]; while(Vett2[j] != 0){ if (Vett2[j] < min && Vett2[j] != SALT){ min = Vett2[j]; i = j; } j = j + 1; } return i; }





Rispondi quotando
