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

    [c]errore lettura e scrittura file binario

    allora ho dichiarato questa struttura e globalmente queste variabili
    codice:
    typedef struct{
           char nome[20];
           char cognome[20];
           char lnascita[20];
           }classe;
           
    classe alunno[30];
    classe temp[30];
    int i=0;
    nella funzione scrivi_file creo un file binario e scrivo la struttura

    codice:
    void scrivi_file(){
         FILE*fp=NULL;
         fp=fopen("anagrafe.dat","ab");
        if(fp==NULL) printf("impossibile creare il file\n");
        else{
             printf("inserisci informazione su file\n");
         printf("inserisci nome\n");
        fflush(stdin);
        gets(alunno[i].nome);
        printf("inserisci cognome\n");
        gets(alunno[i].cognome);
        printf("inserisci luogo di nascita\n");
        gets(alunno[i].lnascita);
        fwrite(&alunno[i],sizeof(classe),1,fp);
        i++;
        fclose(fp);
        }
    }
    e nella funzione carica_file carico il file se esiste(il controllo l'ho fatto nel main quindi entro nella funzione solo se fp è diverso da NULL) quello che leggo lo salvo in una variabile temporanea del tipo struct classe.
    codice:
    void carica_file(FILE*fp){
         int j=0;
         while(fread(&temp[j],sizeof(classe),1,fp)>0){
         j++;
         }
    }
    poi per verificare se ho letto correttamente nella stessa funzione per prova mi sono stampato un campo solo che non lo visualizzo
    codice:
    printf("%s\n",temp[0].nome);
    mi stampa una riga vuota infatti se scrivo per es
    codice:
    printf("ciao %s\n",temp[0].nome);
    ciao lo stampa correttamente ma non visualizzo il resto

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ma la open del file in lettura dove la fai?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Originariamente inviato da oregon
    Ma la open del file in lettura dove la fai?
    la faccio nel main
    codice:
    fp=fopen("anagrafe.dat","rb");
                        if(fp==NULL) printf("il file non esiste\n");
                        else
                        carica_file(fp);

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Allora pubblica tutto il codice, compreso il main, perché il problema potrebbe essere ovunque ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Originariamente inviato da oregon
    Allora pubblica tutto il codice, compreso il main, perché il problema potrebbe essere ovunque ...
    ok.. il codice si inserisce all'interno di un programma che devo completare.. cmq sia l'ho osto interamente
    codice:
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    typedef struct{
           char nome[20];
           char cognome[20];
           char lnascita[20];
           }classe;
           
    classe alunno[30];
    classe temp[30];
    int i=0;
           
    int menu(void);
    void carica_file(FILE*);
    int ricerca_stampa(FILE*);
    void scrivi_file(void);
    
    int main(void){
    int scelta;
    FILE*fp;
    
    do{
    scelta=menu();
    switch(scelta){
                   case 1:
                        scrivi_file();
                        break;
                   case 3:
                        fp=fopen("anagrafe.dat","rb");
                        if(fp==NULL) printf("il file non esiste\n");
                        else
                        carica_file(fp);
                        break;
                   case 4:
                          break;
                   default:
                   printf("operazione non consentita\n");
                   }
    }
    while(scelta!=4);
    return 0;
    }
    
    
    
    int menu(){
        int scelta;
    printf("Benvenuto nel menu'\n");
    printf("1.scrivi file anagrafe\n");
    printf("2.ricerca e stampa file anagrafe\n");
    printf("3.carica file\n");
    printf("4.Esci\n");
    scanf("%d",&scelta);
    return scelta;
    }
    
    
    void scrivi_file(){
         FILE*fp=NULL;
         fp=fopen("anagrafe.dat","ab");
        if(fp==NULL) printf("impossibile creare il file\n");
        else{
             printf("inserisci informazione su file\n");
         printf("inserisci nome\n");
        fflush(stdin);
        gets(alunno[i].nome);
        printf("inserisci cognome\n");
        gets(alunno[i].cognome);
        printf("inserisci luogo di nascita\n");
        gets(alunno[i].lnascita);
        fwrite(&alunno[i],sizeof(classe),1,fp);
        i++;
        fclose(fp);
        }
    }
    
    void carica_file(FILE*fp){
         int j=0;
         while(fread(&temp[j],sizeof(classe),1,fp)>0){
         j++;
         }
       printf("ciao %s\n",temp[0].nome);
         }

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    A me funziona ... non ho i problemi che hai avuto tu ...

    Prova ad eliminare il file dati e riprova.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Originariamente inviato da oregon
    A me funziona ... non ho i problemi che hai avuto tu ...

    Prova ad eliminare il file dati e riprova.
    ho già provato uffa

  8. #8
    ho fatto un'altra cosa.. copia incolla del codice in una altro file sorgente e funziona. mah io certe cose non le capisco proprio..
    Quindi la lettura e scrittura binaria della struttura è fatta correttamente? se invece di voler dichiarare queste variabili globali li avessi dichiarati nel main li avrei dovuti passare come puntatori?

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Sì ... più o meno ...

    Se non sono globali li devi passare come puntatori alle funzioni.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Originariamente inviato da oregon
    Sì ... più o meno ...

    Se non sono globali li devi passare come puntatori alle funzioni.
    perdonami se sono scocciante.. più o meno vuol dire che non è corretta al 100% suppongo, come la posso migliorare?

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.