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

    [C] scrivere dati in file binario

    ciao a tutti
    ho fatto questo breve programmino per scrivere dati in un file binario
    vorrei sapere se il procedimenti è giusto o se avete suggerimenti

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define N 2
    #define max 20
    
    /*
     * 
     */
    int main() {
    
        struct riga {
            char nome[max];
            int punti;
        };
    
        int i;
    	char nom[max];
    	int pu;
    
    	FILE *cfPtr;
        struct riga ri;
    
    	cfPtr = fopen ("classifica.dat" , "a");
    
    	printf ("Inserisci nome squadra e punteggio : \n");
    	printf ("Inserisci EOF per terminare l'inserimento \n");
    
    	while (!feof(stdin)){
    		  scanf ("%s%d", nom, &pu);
    
    		  strcpy(ri.nome, nom);
    		  ri.punti = pu;
    
    		  fwrite(&ri, 1, sizeof(struct riga), cfPtr);
    	}
    	fclose(cfPtr);
    
        return 0;
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Devi indicare che la modalità di accesso al file e' di tipo binario, altrimenti viene utilizzata quella per i file di testo.

    cfPtr = fopen ("classifica.dat" , "ab");

    Perche' ti ostini a non voler leggere la documentazione delle funzioni che usi?

    http://www.cplusplus.com/reference/c.../cstdio/fopen/
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    ok giusto ...devo aggiungere "b"..se binario..sia in scrittura che in lettura




    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define N 2
    #define max 20
    
    /*
     * 
     */
    int main() {
    
        struct riga {
            char nome[max];
            int punti;
        };
    
       
    	char nom[max];
    	int pu;
    
    	FILE *cfPtr;
        struct riga ri;
    
    	cfPtr = fopen ("classifica.dat" , "ab");
    
    	printf ("Inserisci nome squadra e punteggio : \n");
    	printf ("Inserisci EOF per terminare l'inserimento \n");
    
    	while (!feof(stdin)){
    		  scanf ("%s%d", nom, &pu);
    
    		  strcpy(ri.nome, nom);
    		  ri.punti = pu;
    
    		  fwrite(&ri, 1, sizeof(struct riga), cfPtr);
    	}
    
    	
    	fclose ( cfPtr );
    
    
    	cfPtr = fopen ( "classifica.dat" , "rb" );
    
                
    	size_t n = fwrite (&ri , 1 , sizeof( struct riga ) , cfPtr );
    		
    	printf ("%s%d", ri.nome, 
    				ri.punti);
    	
    	fclose ( cfPtr );
    
    
        return 0;
    }

    ma mi si blocca alla seguente istruzione

    codice:
    cfPtr = fopen ( "classifica.dat" , "rb" );

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da jurij7
    ma mi si blocca alla seguente istruzione

    codice:
    cfPtr = fopen ( "classifica.dat" , "rb" );
    Che significa che "si blocca" su quella istruzione? Cosa succede esattamente?

    EDIT:

    Con quella istruzione stai aprendo il file in lettura in modalità binaria, ma poi esegui un'istruzione di scrittura... (write()). Per poterlo fare devi aprire il file appunto in scrittura, o per meglio dire in append perché altrimenti ti si cancella quello che già hai scritto precedentemente.
    every day above ground is a good one

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se apri il file in lettura con rb non puoi usare dopo la fwrite per scrivere, semmai la fread per leggere ....

    E' da un po' che tenti di utilizzare la fopen, fread, fwrite, fclose ... non sono difficili ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    ho fatto in questo modo..ma mi stampa a video 2 volte l'ultimo elemento..devo inserire fflush ?

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define N 2
    #define max 20
    
    /*
     *
     */
    
    struct riga {
            char nome[max];
            int punti;
        };
    
    int main() {
    
    	struct riga ri;
    
    	int fine = 0;
    	int i;
    
    
    	FILE *cfPtr;
    
    	cfPtr = fopen("classifica.dat", "wb");
    
    	while (!fine)
    	{
    		printf("Nome Squadra : \n");
    		scanf("%s", ri.nome);
    		printf("Punti Squadra : \n");
    		scanf("%d", &ri.punti);
    
    		fwrite(&ri, sizeof(struct riga), 1,cfPtr);
    		printf("Fine (SI=1, NO=0) ?");
    		scanf("%d", &fine);
    	}
    	fclose(cfPtr);
    
    	if((cfPtr = fopen("classifica.dat","rb")) == NULL){
    		printf("Il file non può essere aperto");
    	}
    	else{
    
    		while(!feof(cfPtr)){
    		fread(&ri, sizeof(struct riga), 1, cfPtr);
    
    		printf("%s%d\n", ri.nome, ri.punti);
    
    		}
    		fclose(cfPtr);
    	}
        return 0;
    }

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se solo leggessi le specifiche delle funzioni ...

    codice:
      fread(&ri, sizeof(struct riga), 1, cfPtr);
      while(!feof(cfPtr))
      {
        printf("%s%d\n", ri.nome, ri.punti);
        fread(&ri, sizeof(struct riga), 1, cfPtr);
      }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    Originariamente inviato da oregon
    Se solo leggessi le specifiche delle funzioni ...

    codice:
      fread(&ri, sizeof(struct riga), 1, cfPtr);
      while(!feof(cfPtr))
      {
        printf("%s%d\n", ri.nome, ri.punti);
        fread(&ri, sizeof(struct riga), 1, cfPtr);
      }
    ok giustissimo

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non e' possibile.

    Cancella il file, scrivilo nuovamente e riprova controllando il codice.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    Originariamente inviato da oregon
    Non e' possibile.

    Cancella il file, scrivilo nuovamente e riprova controllando il codice.
    ok tutto ok...non avevo invertito la printf con la fread all'interno della while..ora è ok!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.