Aiuto per esame

di il
1 risposte

Aiuto per esame

Ciao a tutti,devo fare fra pochi giorni un esame sul linguaggio C,ma sono alle prime armi e abbastanza in difficolta'.

Sto cercando di scrivere un programma con la seguente consegna:

I leggere e caricare in memoria tutti i dati contenuti in due file F1 e F2
generici,entrmbi contenenti un elenco di numeri interi, un numero per riga. Il primo numero in
ciascun file indica quanti sono i rimanenti numeri contenuti nel rispettivo file. Tale primo valore
non è da considerare nelle successive elaborazioni, ma serve soltanto ad indicare quanti sono
i numeri da leggere nel file.
Il programma dovrà calcolare e stampare la media dei valori letti dal solo file F1. Ciascun
valore che viene considerato per il calcolo della media deve rispettare i seguenti criteri:
• il numero NON DEVE essere contenuto dell'insieme di valori letti dal file F2;
• il numero deve essere maggiore o uguale di un valore precedentemente richiesto e
inserito da tastiera dall'utente.


Allego il codice scritto da me

#include <stdio.h>

int main(int argc,char **argv)
{
 FILE *f1,*f2;
 int soglia;
 int lung1,lung2;
 int i;
 int j;
 int *valori,*esclusi;
 int somma,media;
 int cont=0;
    if(argc!=3){printf("Bisogna inserire due file da linea di comando");
    }

    f1=fopen(argv[1],"r");
    f2=fopen(argv[2],"r");

    if(f1==NULL || f2==NULL){
      printf("i file non sono stati aperti correttamente");
    }
 fread(&lung1,sizeof(int),1,f1);
 fread(&lung2,sizeof(int),1,f2);

 valori=(int*)malloc(sizeof(int)*((lung1)+1));
 esclusi=(int*)malloc(sizeof(int)*((lung2)+1));   


printf("inserire un valore di soglia");

scanf("%d",&soglia);


    for(i=0;i<lung1;i++){
	  fscanf(f1,"%d",&valori[i]);
		if(valori[i]>=soglia){
		   for(j=0;j<lung2;j++){
			   fscanf(f2,"%d",&esclusi[j]);
			     if(valori[i]==esclusi[j])break;
	   }
		  if(j==lung2){
			  somma+=valori[i];
			  cont++;}
	    }
      }
      media=somma/cont;
	 printf("%d",media);

free(valori);
free(esclusi);
return 0;
}
Eseguendolo mi viene dato un errore di segmentation fault[core dumped]
Qualcuno potrebbe aiutarmi a capire dov'e' l'errore??grazie

1 Risposte

  • Re: Aiuto per esame

    Intanto cambia ste righe
    
    fread(&lung1,sizeof(int),1,f1);
    fread(&lung2,sizeof(int),1,f2);
    
    se dopo usi fscanf perche non lo puoi fare anche prima. anche perche quelle righe ti legono 4 byte dal file (fread legge in binario e sizeof(int) di solito è 4). Quindi secodno me stai leggendo troppi dati. Fai sta modifica poi vediamo il resto.
Devi accedere o registrarti per scrivere nel forum
1 risposte