ciao a tutti
ho fatto questo breve programmino sulla gestione di appartamenti.
ma mi da errore di segmentation fault.
qualcuno sa aiutarmi ?
codice:#include <stdio.h> #include <stdlib.h> #define N 10 /* dichiarazione della struttura assegnazione */ struct assegnazione { int Numero_appartamento; char Nome_Proprietario[20]; char Cognome_Proprietario[20]; int Settimana_acquistata; }; int main() { struct assegnazione ass; struct assegnazione v[ N ]; int fine, app, num, low, high, middle; int i, j, k; char buffer[20]; FILE *cfPtr; /* puntatore al file proprietà.dat */ if ((cfPtr = fopen("proprietà.dat", "wb") == NULL)) { printf("Il file non può essere aperto"); } else { while (!fine) { printf("Numero appartamento : \n"); scanf("%d", &ass.Numero_appartamento); printf("Nome del Proprietario : \n"); scanf("%s", ass.Nome_Proprietario); printf("Cognome del Proprietario : \n"); scanf("%s", ass.Cognome_Proprietario); printf("Settimana acquistata : \n"); scanf("%s", &ass.Settimana_acquistata); /* scriviamo i dati inseriti sul file puntato da cfPtr */ fwrite(&ass, sizeof(struct assegnazione), 1, cfPtr); printf("Fine (SI=1, NO=0) ?"); scanf("%d", &fine); } fclose(cfPtr); } if( (cfPtr = fopen("proprietà.dat", "rb") ) == NULL) { printf("Il file non può essere aperto"); } else{ /* Legge dal file e li memorizza in memoria in v */ i = 0; while(!feof(cfPtr)) { fread(&v[i], sizeof( struct assegnazione), 1, cfPtr); i++; } fclose(cfPtr); } /* Ordinamento crescente con aLgoritmo BUBBLE SORT */ for ( j = 1; j < i + 1; j++ ) { for ( k = 0; k < i; k++ ) { if ( v[j].Numero_appartamento > v[k].Numero_appartamento) { app = v[k].Numero_appartamento; v[k].Numero_appartamento = v[j].Numero_appartamento; v[j].Numero_appartamento = app; strcpy(buffer, v[k].Nome_Proprietario); strcpy(v[k].Nome_Proprietario, v[j].Nome_Proprietario); strcpy(v[j].Nome_Proprietario, buffer); strcpy(buffer, v[k].Cognome_Proprietario); strcpy(v[k].Cognome_Proprietario, v[j].Cognome_Proprietario); strcpy(v[j].Cognome_Proprietario, buffer); app = v[k].Settimana_acquistata; v[k].Settimana_acquistata = v[j].Settimana_acquistata; v[j].Settimana_acquistata = app; } } } printf("Inserisci numero appartamento da ricercare : \n"); scanf( "%d", &num ); low = 0; high = i; while ( low <= high ) { middle = i / 2; if ( num == v[middle].Numero_appartamento ) { printf("I dati dell'appartamento cercato sono : \n"); printf("%d\n", v[middle].Numero_appartamento); printf("%s\n", v[middle].Nome_Proprietario); printf("%s\n", v[middle].Cognome_Proprietario); printf("%d\n", v[middle].Settimana_acquistata); } else if ( num < v[middle].Numero_appartamento ) { high = middle - 1; } else { low = middle + 1; } } return 0; }

Rispondi quotando