PDA

Visualizza la versione completa : Problema nella scrittura di un programma in c


Vladimir99
28-10-2014, 19:59
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.


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

oregon
28-10-2014, 22:02
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

Loading