Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [C] Errore lettura da file inserendone il nome

    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;
    }

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,567
    Il file è nella stessa cartella dell'eseguibile?
    In caso contrario scrivi il percorso al file?
    Il nome del file (e/o il percorso) contiene spazi?
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.