Problema esecuzione programma in c

di Anonimizzato15457 il
7 risposte
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

  • Vlad ... qui il crossposting è vietato ...
  • Perdonami non sono pratico cosa dovrei fare allora?
  • Leggere e rispettare il regolamento dei forum dove scrivi, magari prima di scriverci ...

    Come si fa a risponderti contemporaneamente qui e su html.it ?
  • Hai ragione farò più attenzione. Certo che, è difficile che una cosa del genere accada su due siti paralleli. Non l'ho fatto per creare disagi, solo per avere un'altro parere, mi spiace.
  • Non è difficile, accade più volte al giorno ...
  • Comunque ho segnalato il mio messaggio, mi spiace per il disturbo e grazie per l'aiuto.
  • Chiuso come da regolamento e su richiesta dell'utente.
Devi accedere o registrarti per scrivere nel forum
7 risposte