Pagina 1 di 5 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 46
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636

    [C] problema in lettura file .dat

    ciao a tutti
    ho fatto questo programmino per leggere un file .dat e portare il suo contenuto in una struttura
    ho fatto il caso di solo 2 record.
    il primo record me lo mette nella struct esattamente mentre il secondo, mi legge solo il cognome diverso mentre gli altri campi li legge uguali a quelli del record precedente
    non riesco a capire dove sbaglio
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define maxchar 30
    #define N 2
    
    /*
     *
     */
    int main() {
    
        struct selezione{
            char cognonome[maxchar];
            int giorno;
            char mese[maxchar];
            int stanza;
            int notti;
        }sele[N];
    
        int;
        char cognomenome[maxchar];
        int giornoini;
        char meseini[maxchar];
        int numsta;
        int numnot;
    
    
        FILE *cfPtr; /*cfPtr = punta al file albergo.dat*/
    
    
        /*scrive il file*/
        if ((cfPtr = fopen("client.dat", "w")) == NULL){
            printf ("Il file non può essere aperto");
        }
    
        else{
            printf ("Inserisci i dati : \n");
            printf ("Inserisci EOF per terminare l'inserimento \n");
            scanf ("%s%d%s%d%d", cognomenome, &giornoini, meseini, &numsta, &numnot);
    
    	while (!feof(stdin)){
    	fprintf (cfPtr, "%s%d%s%d%d\n", cognomenome, giornoini, meseini, numsta, numnot);
            scanf ("%s%d%s%d%d", cognomenome, &giornoini, meseini, &numsta, &numnot);
    
            }
    		 fclose(cfPtr);
    
            }
    
             
    
    	 
    
         /*fopen apre il file*/
        if ((cfPtr = fopen("client.dat", "r")) == NULL){
            printf ("Il file non può essere aperto");
        }
        else{
    		i = 0;
            printf ("%-10s%-10s%-10s%-10s%-10s", "Cognome", "Giorno", "Mese", "Stanza", "Notti");
            fscanf (cfPtr, "%s%d%%s%d%d", cognomenome, &giornoini, meseini, &numsta, &numnot);
    
    
                strcpy(sele[i].cognonome,cognomenome);
                sele[i].giorno = giornoini;
                strcpy(sele[i].mese,meseini);
                sele[i].stanza = numsta;
                sele[i].notti = numnot;
    			i++;
    	
        
          
    
             while (!feof(cfPtr)){
                fscanf (cfPtr, "%s%d%s%d%d", cognomenome, &giornoini, meseini, &numsta, &numnot);
    
                strcpy(sele[i].cognonome,cognomenome);
                sele[i].giorno = giornoini;
                strcpy(sele[i].mese,meseini);
                sele[i].stanza = numsta;
                sele[i].notti = numnot;
    
                i++;
    
             }
              fclose(cfPtr);
    }
    
    		for (i = 0; i < N; i++){
            printf ("\n%s%d%s%d%d", sele[i].cognonome,  sele[i].giorno, sele[i].mese, sele[i].stanza, sele[i].notti);
               }
    
    
    
    	system("PAUSE");
    
        return 0;
    
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    La solita risposta ... hai fatto un po' di debugging ? Hai controllato passo-passo quando leggi il secondo record, se le variabili che utilizzi per la lettura contengono i dati che ti aspetti?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    si ho controllato tutto..lo faccio sempre oramai..prima di postare il prooblema qui.
    Ma non trovo l'errore

  4. #4

    Re: [C] problema in lettura file .dat

    Originariamente inviato da jurij7
    codice:
    ...
         /*fopen apre il file*/
        if ((cfPtr = fopen("client.dat", "r")) == NULL){
            printf ("Il file non può essere aperto");
        }
        else{
    		i = 0;
            printf ("%-10s%-10s%-10s%-10s%-10s", "Cognome", "Giorno", "Mese", "Stanza", "Notti");
            fscanf (cfPtr, "%s%d%%s%d%d", cognomenome, &giornoini, meseini, &numsta, &numnot);
    ...
    e' voluto il doppio carattere '%'?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    no, non è voluto..ma cmq non risolve il problema
    grazie cmq

  6. #6
    Tra l'altro il codice che hai inviato non è compilabile:

    codice:
    $ gcc -Wall -ansi -pedantic -Wextra -Wconversion main.c 
    main.c: In function 'main':
    main.c:19: warning: useless type name in empty declaration
    main.c:58: error: 'i' undeclared (first use in this function)
    main.c:58: error: (Each undeclared identifier is reported only once
    main.c:58: error: for each function it appears in.)
    main.c:60: warning: format '%d' expects type 'int *', but argument 5 has type 'char *'
    main.c:60: warning: too many arguments for format
    main.c:63: warning: implicit declaration of function 'strcpy'
    main.c:63: warning: incompatible implicit declaration of built-in function 'strcpy'
    osserva che tra i warning... ti segnala un probabile problema nel doppio segno di '%' che ti ho segnalato prima.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    a me lo compila tranquillamente
    ma non mi legge i dati come dovrebbe

  8. #8
    Originariamente inviato da jurij7
    a me lo compila tranquillamente
    ma non mi legge i dati come dovrebbe
    cambia compilatore!

  9. #9
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    notare le dichiarazioni delle veriabili

    codice:
        int;
        char cognomenome[maxchar];
        int giornoini;
    quell' "int" vagante è una chicca alla visualBasic come pure questo

    codice:
    i = 0;
    senza dichiarazione

    Immagino usi il dev c++ perchè code-blocks con mingw non lo compila, nemmeno v++ 2005 e 2008

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Beh, per curiosità ho provato a compilarlo (con MS VC++ 2008) e mi da' warning ed errori ... a parte le questioni di sicurezza, ce ne sono tanti, quindi concordo sul fatto che dovresti cambiare compilatore ...

    Avviso 1 warning C4091: '': ignorato a sinistra di 'int' quando non si dichiara alcuna variabile c:\vcapps\test\x12\x12\x12.cpp 25 x12
    Avviso 2 warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\vcapps\test\x12\x12\x12.cpp 37 x12
    Avviso 3 warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\vcapps\test\x12\x12\x12.cpp 44 x12
    Avviso 4 warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\vcapps\test\x12\x12\x12.cpp 48 x12
    Avviso 5 warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\vcapps\test\x12\x12\x12.cpp 60 x12
    Errore 6 error C2065: 'i': identificatore non dichiarato c:\vcapps\test\x12\x12\x12.cpp 64 x12
    Errore 7 error C2065: 'i': identificatore non dichiarato c:\vcapps\test\x12\x12\x12.cpp 69 x12
    Errore 8 error C2228: l'elemento a sinistra di '.cognonome' deve avere una classe, struttura o unione c:\vcapps\test\x12\x12\x12.cpp 69 x12
    Errore 9 error C2065: 'i': identificatore non dichiarato c:\vcapps\test\x12\x12\x12.cpp 70 x12
    Errore 10 error C2228: l'elemento a sinistra di '.giorno' deve avere una classe, struttura o unione c:\vcapps\test\x12\x12\x12.cpp 70 x12
    Errore 11 error C2065: 'i': identificatore non dichiarato c:\vcapps\test\x12\x12\x12.cpp 71 x12
    Errore 12 error C2228: l'elemento a sinistra di '.mese' deve avere una classe, struttura o unione c:\vcapps\test\x12\x12\x12.cpp 71 x12
    Errore 13 error C2065: 'i': identificatore non dichiarato c:\vcapps\test\x12\x12\x12.cpp 72 x12
    Errore 14 error C2228: l'elemento a sinistra di '.stanza' deve avere una classe, struttura o unione c:\vcapps\test\x12\x12\x12.cpp 72 x12
    Errore 15 error C2065: 'i': identificatore non dichiarato c:\vcapps\test\x12\x12\x12.cpp 73 x12
    Errore 16 error C2228: l'elemento a sinistra di '.notti' deve avere una classe, struttura o unione c:\vcapps\test\x12\x12\x12.cpp 73 x12
    Errore 17 error C2065: 'i': identificatore non dichiarato c:\vcapps\test\x12\x12\x12.cpp 74 x12
    Errore 18 error C2065: 'i': identificatore non dichiarato c:\vcapps\test\x12\x12\x12.cpp 82 x12
    Errore 19 error C2228: l'elemento a sinistra di '.cognonome' deve avere una classe, struttura o unione c:\vcapps\test\x12\x12\x12.cpp 82 x12
    Errore 20 error C2065: 'i': identificatore non dichiarato c:\vcapps\test\x12\x12\x12.cpp 83 x12
    Errore 21 error C2228: l'elemento a sinistra di '.giorno' deve avere una classe, struttura o unione c:\vcapps\test\x12\x12\x12.cpp 83 x12
    Errore 22 error C2065: 'i': identificatore non dichiarato c:\vcapps\test\x12\x12\x12.cpp 84 x12
    Errore 23 error C2228: l'elemento a sinistra di '.mese' deve avere una classe, struttura o unione c:\vcapps\test\x12\x12\x12.cpp 84 x12
    Errore 24 error C2065: 'i': identificatore non dichiarato c:\vcapps\test\x12\x12\x12.cpp 85 x12
    Errore 25 error C2228: l'elemento a sinistra di '.stanza' deve avere una classe, struttura o unione c:\vcapps\test\x12\x12\x12.cpp 85 x12
    Errore 26 error C2065: 'i': identificatore non dichiarato c:\vcapps\test\x12\x12\x12.cpp 86 x12
    Errore 27 error C2228: l'elemento a sinistra di '.notti' deve avere una classe, struttura o unione c:\vcapps\test\x12\x12\x12.cpp 86 x12
    Errore 28 error C2065: 'i': identificatore non dichiarato c:\vcapps\test\x12\x12\x12.cpp 88 x12
    Errore 29 error C2065: 'i': identificatore non dichiarato c:\vcapps\test\x12\x12\x12.cpp 94 x12
    Errore 30 error C2065: 'i': identificatore non dichiarato c:\vcapps\test\x12\x12\x12.cpp 94 x12
    Errore 31 error C2065: 'i': identificatore non dichiarato c:\vcapps\test\x12\x12\x12.cpp 94 x12
    Errore 32 error C2065: 'i': identificatore non dichiarato c:\vcapps\test\x12\x12\x12.cpp 95 x12
    Errore 33 error C2228: l'elemento a sinistra di '.cognonome' deve avere una classe, struttura o unione c:\vcapps\test\x12\x12\x12.cpp 95 x12
    Errore 34 error C2065: 'i': identificatore non dichiarato c:\vcapps\test\x12\x12\x12.cpp 95 x12
    Errore 35 error C2228: l'elemento a sinistra di '.giorno' deve avere una classe, struttura o unione c:\vcapps\test\x12\x12\x12.cpp 95 x12
    Errore 36 error C2065: 'i': identificatore non dichiarato c:\vcapps\test\x12\x12\x12.cpp 95 x12
    Errore 37 error C2228: l'elemento a sinistra di '.mese' deve avere una classe, struttura o unione c:\vcapps\test\x12\x12\x12.cpp 95 x12
    Errore 38 error C2065: 'i': identificatore non dichiarato c:\vcapps\test\x12\x12\x12.cpp 95 x12
    Errore 39 error C2228: l'elemento a sinistra di '.stanza' deve avere una classe, struttura o unione c:\vcapps\test\x12\x12\x12.cpp 95 x12
    Errore 40 error C2065: 'i': identificatore non dichiarato c:\vcapps\test\x12\x12\x12.cpp 95 x12
    Errore 41 error C2228: l'elemento a sinistra di '.notti' deve avere una classe, struttura o unione c:\vcapps\test\x12\x12\x12.cpp 95 x12
    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.