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

    Problema nella scrittura di un 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?
    Grazie.

    codice:
    #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;
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Controlla meglio le due for e tutte le if ... c'è molta confusione con le parentesi { e } ... i blocchi sono confusi e il ciclo con j dà problemi ...

    Considera anche che l'elemento char sesso[1] (che equivale a char sesso) non è una stringa e non va trattato con %s o strcpy
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.