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