Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    113

    [C] problemino con struct

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

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213
    Ho provato a compilare il tuo codice e comunque hai mancato di includere la libreria string.h per la strcpy che usi ed inoltre quando inserisci un appartamento nell'ultimo printf dovrebbe esserci %d per l'intero e non %s poichè non è una stringa.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    113
    ok grazie..ho correto ma comunque rimane segmentation fault quando rpovo a compilare.
    credo sia un problema di indirizzi ma non so in che modo.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    113
    Originariamente inviato da sizeof
    ok grazie..ho correto ma comunque rimane segmentation fault quando rpovo a compilare.
    credo sia un problema di indirizzi ma non so in che modo.
    Nessuno può aiutarmi?

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Il seg fault non è quando compili ma quando esegui.

    Il problema è sugli indici che usi quando ordini ma esistono altri problemi come questa

    ((cfPtr = fopen("proprietà.dat", "wb") == NULL))

    che dovrebbe essere

    ((cfPtr = fopen("proprietà.dat", "wb")) == NULL)

    Controlla che il valore di i restituito dalla lettura sia corretto

    Esegui il programma passo passo con il debug eseguendo l'ordinamento
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    113
    Come faccio ad eseguire il programma passo passo con il debug ?
    p.s. Sto utilizzando code blocks

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non uso code blocks ma ci sarà nella documentazione ...
    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.