Problema con un programma in c

di Anonimizzato28637 il
16 risposte
Salve dovrei eseguire un programma che letti numeri da file mi dovrebbe restituire il più grande.
Ovviamente il programma non esegue correttamente e noncapisco cosa ho sbagliato.
int main(int argc, char** argv) {
    FILE *fp;
    int max,num;
    fp=fopen("testi.txt","r");
   
    while(!feof(fp)){
        fscanf(fp,"%d",&num);
       
        if(num>max){
            max=num;
        }
    }
     printf ("L elemento maggiore e %d",max);
    fclose(fp);
   
        
    

    return (EXIT_SUCCESS);
}
Qualcuno mi potrebbe aiutare?

16 Risposte

  • Hai inizializzato max all'inizio del programma?
  • Sisi l ho inizializzato max
  • Dove?
  • Esattamente che problema ti da?

    Comunque credo che _Achille abbia ragione.... .
  • L ho inizializzato cosi
    int main(int argc, char** argv) {
        FILE *fp;
        int max=0,num;
        fp=fopen("testi.txt","r");
       
        while(!feof(fp)){
            fscanf(fp,"%d",&num);
           
            if(num>max){
                max=num;
            }
        }
         printf ("L elemento maggiore e %d",max);
        fclose(fp);
       
            
        
    
        return (EXIT_SUCCESS);
    }
    il programma quando lo compilo non mi da errori pero quando lo eseguo non fa niente.
  • Ciao,
    ho provato il codice sulla mia macchina e funziona. Probabilmente il tuo problema è che non trova il file di testo, assicurati che sia nella stessa cartella dell'eseguibile.
  • Siii è vero il file l avevo inserito da un altra parte.
    Grazie mille
  • A parte il fatto che il file era da un'altra parte, max nel codice iniziale NON era inizializzato.
  • L avevo inizializzato solo che nel ricopiare il codice si era tolto.
    comunque sto facendo lo stesso programma pero con funzioni esterne al main, stavolta il file l ho inserito correttamente pero lo stesso quando viene eseguito non esegue nulla.
     int maxdafile(char *nomefile,int *max);
    int main(int argc, char** argv) {
        int massimo;
        maxdafile("testi.txt",&massimo);
        printf ("Il massimo e %d",massimo);
       
        
    
        return (EXIT_SUCCESS);
    }
    int maxdafile(char *nomefile,int *max){
        FILE *fp;
        int a;
        fp=fopen(nomefile,"r");
        fscanf(fp,"%d",&max);
        while(!feof(fp)){
            fscanf(fp,"%d",&a);
            if(a>*max){
                *max=a;
            }
        }
        fclose(fp);
        
    }
    
  • Non usi la variabile a per leggere da file e DI NUOVO non inizializzi max
  • Scusami qui a max gli ho dato il primo valore che si trova nel file, è scorretto?
  • Ok ... ma il max che leggi è GIA' un puntatore quindi non

    fscanf(fp,"%d",&max);

    ma

    fscanf(fp,"%d", max);

    Se usi una funzione che restituisce un intero, allora il max lo restituisci con il return e non come parametro con un puntatore. Decidi.
  • Questo è il corretto approccio. Come ti ha consigliato oregon, se specifichi come tipo di ritorno un int, ritornalo con la keyword return, altrimenti utilizza void se la tua funzione non deve produrre un risultato ma solo eseguire un'operazione.
    
    int maxdafile(char *);
    int main(int argc, char** argv) {
        int massimo;
        massimo = maxdafile("testi.txt");
        printf ("Il massimo e %d",massimo);
        return (EXIT_SUCCESS);
    }
    
    int maxdafile(char *nomefile){
        FILE *fp;
        int a;
        int max=0;
        fp=fopen(nomefile,"r");
    
        while(!feof(fp)){
            fscanf(fp,"%d",&a);
            if(a>max){
                max=a;
            }
        }
        fclose(fp);
        return max;
    }
    
    Edit: inserire il nome del parametro quando dichiari la funzione (prima riga) è inutile ai fini del funzionamento del programma (il compilatore lo ignora).
  • L errore stava nel metter la & davanti a max come mi aveva detto oregon.
    Come ho svolto io il programma, i parametri sono passati per riferimento? O sto dicendo una baggianata?
Devi accedere o registrarti per scrivere nel forum
16 risposte