Problema esecuzione programma in c

di il
7 risposte

Problema esecuzione programma in c

Volevo sapere se qualcuno poteva aiutarmi nella risoluzione di un problema riscontrato nella scrittura di un programma in c. Il testo richiedere di catturare da un file nome cognome data di nascita(gg/mm/aaaa) e sesso di N individui in un vettore di struct allocato dinamicamente. Successivamente richiede di ordinare per ordine crescente gli individui usando come parametro le loro date di nascita. Io ho scritto questo codice, solo che durante l'esecuzione riscontro questo errore "Errore di segmentazione (core dump creato)", qualcuno saprebbe dirmi a cosa è dovuto e come risolverlo? Ps:Il condice non è completo ho solo effettuato l'ordinamento nel caso in cui l'anno di nascita sia sempre diverso.
Grazie.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 35

typedef struct str {

 char nome[M];
 char cognome[M];
 int giorno;
 int mese;
 int anno;
 char sesso[1];

} studenti;

typedef struct temp {

 char name[M];
 char surname[M];
 int day;
 int mounth;
 int year;
 char type[1];
} temporaneo;

int main(int argc,char *argv[]) {

int N;
FILE *a;
FILE *b;
FILE *c;
studenti *vett;
int cont=0;
int var=0;
int i;
int j;
temporaneo temp;

if( argc != 2 ) {
 printf("Numero di parametri non valido\n");
 exit(1);
}

 else {

  if ( ( a = fopen(argv[1],"r") ) == NULL ) {
   printf("Impossbile aprire il file\n");
   exit(1);
  }

   else { 

    fscanf(a,"%d", &N);   
    vett = (studenti *)malloc(N*sizeof(studenti));

    while( !cont ) { 
     fscanf(a,"%s", vett[var].nome);
     fscanf(a,"%s", vett[var].cognome);
     fscanf(a,"%d/%d/%d", &vett[var].giorno,&vett[var].mese,&vett[var].anno);      
     fscanf(a,"%s", vett[var].sesso);
     printf("iuccia\n");

      if ( var==N-1)
       cont = 1;

     var++;
      }

var=0;
cont=0;

    for( i=0; i<N-1; i++ ) {
     for( j=i+1; i<N; j++ ) {
      if ( vett[i].anno > vett[j].anno ) {
//copia tutti i valori in vett[i]
      strcpy(temp.name,vett[i].nome);
      strcpy(vett[i].nome,vett[j].nome);
      strcpy(vett[j].nome,temp.name);

      strcpy(temp.surname,vett[i].cognome);
      strcpy(vett[i].cognome,vett[j].cognome);
      strcpy(vett[j].cognome,temp.surname);

      temp.day = vett[i].giorno;
      vett[i].giorno = vett[j].giorno;
      vett[j].giorno = temp.day;

      temp.mounth = vett[i].mese;
      vett[i].mese = vett[j].mese;
      vett[j].mese = temp.mounth;


      temp.year = vett[i].anno;
      vett[i].anno = vett[j].anno;
      vett[j].anno = temp.year;

      strcpy(temp.type,vett[i].sesso);
      strcpy(vett[i].sesso,vett[j].sesso);
      strcpy(vett[j].sesso,temp.type);      

      }
      else if ( vett[i].anno == vett[j].anno ) {
       if( vett[i].mese > vett[j].mese ) {
       //copia tutti i valori in vett[i]

  
       }
      else if ( vett[i].giorno == vett[j].giorno ) {
       if( vett[i].giorno > vett[i].giorno ) {
        //copia tutti i valori in vett[i]

  
       }
      }
      }
     }
    }    


    fclose(a);

     while( !cont){
     printf("%s ", vett[var].nome);
     printf("%s ", vett[var].cognome);
     printf("%d/%d/%d ", vett[var].giorno,vett[var].mese,vett[var].anno);
     printf("%s ", vett[var].sesso);
     printf("\n"); 


     if( var == N-1 ) 
     cont =1;
      var++;
    }

}}


for(i=0; i<N; i++ ) 
free(vett);


return 0;
}

7 Risposte

Devi accedere o registrarti per scrivere nel forum
7 risposte