Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    C/C++ scrivere struct su file

    Volevo sapere se era possibile scrivere il contenuto di una struct come nell'esempio, all'interno di un file sotto forma di riga!
    se possibile come?

    struct scheda
    {
    char cognome [50];
    char nome[50];
    char indirizzo[100];
    int codice_pers;
    };

  2. #2
    codice:
    #include <stdio.h>
    
    struct struttura
    {
        char nome[20];
        char cognome[20];
    } scheda;
    
    
    int main(){
        	
        FILE* pf;
    	
        printf("INSERISCI NOME   : ");
        scanf("%s", scheda.nome);
        printf("INSERISCI COGNOME: ");
        scanf("%s", scheda.cognome);
    
        pf = fopen("scheda.txt", "w");
    	    
        fprintf(pf, "%s\n", scheda.nome);
        fprintf(pf, "%s\n", scheda.cognome);
    		
        fclose (pf);
    
        printf ("RECORD INSERTITO CON SUCCESSO\n");
    
        return 0;	
    
    }
    ...Terrible warlords, good warlords, and an english song

  3. #3

    ok ma mi da un errore!!!

    questo è il mio completo, va tutto bene fino a quando va a scrivere su file!!!! che mi dice la memoria non poteva essere written...0*000032! Perchè?

    #include <stdio.h>

    struct struttura
    {
    char cognome [50];
    char nome[50];
    char indirizzo[100];
    int codice_pers;
    } persona;

    main ()
    {
    FILE *fp1;
    char ancora;
    /*Se il file rubrica.txt non esiste lo crea. */
    if ((fp1 =fopen("rubrica.txt", "r")) == NULL)
    {
    printf("Il file rubrica.dat non esiste e sara' creato\n");
    fp1= fopen("rubrica.txt", "w");
    }
    /* printf("Inserire la posizione\n"); */
    /*scanf ("%d", &abbonato.posizione); */
    /*Si ripete l'inserimento fino a quando si sceglie di inserire nominativi*/
    while (ancora != 'n' && ancora != 'N')
    {
    printf("Inserire il nome\n");
    scanf("%s", persona.nome);
    printf("Inserire il cognome\n");
    scanf("%s", persona.cognome);
    printf("Inserire l'indirizzo\n");
    scanf("%s", persona.indirizzo);
    printf("Inserire il codice persona\n");
    scanf("%s", persona.codice_pers);
    fprintf(fp1, "%s\n", persona.nome );
    fprintf(fp1, "%s\n", persona.cognome);
    fprintf(fp1, "%s\n", persona.indirizzo);
    fprintf(fp1, "%s\n", persona.codice_pers);
    printf("\nSi desidera aggiungere un altro nominativo?\n");
    ancora = '0';
    /* Verifico che non vengano immessi altri carateri al di fuori di s,S,n,N */
    while (ancora != 's' && ancora !='S' && ancora !='n' && ancora !='N')
    {
    printf ("Rispondere s/S o n/N\n");
    scanf("%s",&ancora);
    }
    }
    /*chiudo il file*/
    fclose(fp1);
    }

  4. #4
    codice:
    #include <stdio.h> 
    
    
    struct struttura 
    { 
        char nome[20];
        char cognome [20]; 
        char indirizzo[50]; 
        char codice_pers[10]; 
    } persona; 
    
    
    void main () 
    { 
        FILE *fp; 
        char ancora; 
    
        /*Se il file rubrica.txt non esiste lo crea. */
     
        if (!(fp = fopen("rubrica.txt", "a+"))) 
            printf("Il file rubrica.dat non esisteva ed e\' stato appena creato\n"); 
    	
    		
        /*Si ripete l'inserimento fino a quando si sceglie di inserire nominativi*/ 
    	
        do 
        { 
            printf("Inserire il nome: "); 
    	fgets(persona.nome, 50, stdin); 
    	printf("Inserire il cognome: "); 
    	fgets(persona.cognome, 50, stdin); 
    	printf("Inserire l'indirizzo: "); 
    	fgets(persona.indirizzo, 50, stdin); 
    	printf("Inserire il codice persona: "); 
    	fgets(persona.codice_pers, 10, stdin); 
    		
    	fprintf(fp, "%s", persona.nome ); 
    	fprintf(fp, "%s", persona.cognome); 
    	fprintf(fp, "%s", persona.indirizzo); 
    	fprintf(fp, "%s", persona.codice_pers); 
    	
    	printf("\nSi desidera aggiungere un altro nominativo?\n"); 
    	
            ancora = '0'; 
    
    	/* Verifico che non vengano immessi altri carateri al di fuori di s,S,n,N */
     
    	while (ancora != 's' && ancora !='S' && ancora !='n' && ancora !='N') 
    	{ 
    	    printf ("Rispondere [S/N]: "); 
    	    scanf("%c",&ancora);
    	    while((getchar()) != '\n');
    	} 
    	
        } while (ancora != 'n' && ancora != 'N'); 
    
        /*chiudo il file*/
     
        fclose(fp); 
    
    }
    ...Terrible warlords, good warlords, and an english song

  5. #5

    ok ma

    è importante che codice_pers sia un int!

  6. #6
    codice:
    #include <stdio.h> 
    
    
    struct struttura 
    { 
        char nome[50];
        char cognome [50]; 
        char indirizzo[100]; 
        int codice_pers; 
    } persona; 
    
    
    void main () 
    { 
        FILE *fp; 
        char ancora; 
    
        //Se il file rubrica.txt non esiste lo crea.  
    
        if (!(fp = fopen("rubrica.txt", "a+"))) 
    	printf("Il file rubrica.dat non esisteva ed e\' stato appena creato\n"); 
    	
    		
        //Si ripete l'inserimento fino a quando si sceglie di inserire nominativi 
    	
        do 
        { 
            printf("Inserire il nome: "); 
    	fgets(persona.nome, 50, stdin); 
    	printf("Inserire il cognome: "); 
    	fgets(persona.cognome, 50, stdin); 
    	printf("Inserire l'indirizzo: "); 
    	fgets(persona.indirizzo, 50, stdin); 
    	printf("Inserire il codice persona: "); 
    	scanf("%d", &persona.codice_pers); 
    		
    	fprintf(fp, "%s", persona.nome ); 
    	fprintf(fp, "%s", persona.cognome); 
    	fprintf(fp, "%s", persona.indirizzo); 
    	fprintf(fp, "%d\n", persona.codice_pers); 
    	
    	printf("\nSi desidera aggiungere un altro nominativo?\n"); 
    		
    	ancora = '0'; 
    
    	// Verifico che non vengano immessi altri carateri al di fuori di s,S,n,N  
    	    
            while (ancora != 's' && ancora !='S' && ancora !='n' && ancora !='N') 
    	{ 
    	    printf ("Rispondere [S/N]: "); 
    	    scanf("%c",&ancora);
    	}
    		
    	while((getchar()) != '\n');
    	
        } while (ancora != 'n' && ancora != 'N'); 
    
        //chiudo il file 
        
        fclose(fp); 
    
    }
    ...Terrible warlords, good warlords, and an english song

  7. #7

    Grazie

    un ultima cosa, siccome devo fare un ordinamento in base al codice persona all'interno del file, e inoltre dovrò modificare una persona o cancellarla del tutto, mi conviene di più che i dati siano disposti per riga o come nel formato di adesso uno sotto l'altro?

  8. #8

    mi spiego

    così com'è il file viene creato in questo modo:

    luca maria
    Marco aurelio
    Via caniggia 8
    34

    ma se volessi una struttura del genere:

    luca maria Marco aurelio Via caniggia 8 34

    con:
    fprintf (pf1, "%s%s%s%d", persona.nome, persona.cognome,
    persona.indirizzo, persona.codice_pers);
    ma credo che negli array ci siano dei caratteri (tipo '\n') che mi fanno andare a capo lostesso!!!
    come posso risolvere questo problema?

    Grazie!!!:master:

  9. #9
    BASTA TOGLIERE I NEWLINE
    codice:
    #include <stdio.h> 
    
    
    struct struttura 
    { 
        char nome[20];
        char cognome[20]; 
        char indirizzo[50]; 
        int codice_pers; 
    } persona; 
    
    
    void main () 
    { 
    
        FILE *fp; 
        char ancora;
        int i;
    
        //Se il file rubrica.txt non esiste lo crea.  
    	
        if (!(fp = fopen("rubrica.txt", "a+"))) 
    	printf("Il file rubrica.dat non esisteva ed e\' stato appena creato\n"); 
    	
    		
        //Si ripete l'inserimento fino a quando si sceglie di inserire nominativi 
    	
        do 
        { 
     	printf("Inserire il nome: "); 
    	fgets(persona.nome, 20, stdin); 
    	printf("Inserire il cognome: "); 
    	fgets(persona.cognome, 20, stdin); 
    	printf("Inserire l'indirizzo: "); 
    	fgets(persona.indirizzo, 50, stdin); 
    	printf("Inserire il codice persona: "); 
    	scanf("%d", &persona.codice_pers); 
    
    	for(i=0; i<20; i++){
                if(persona.nome[i]=='\n') persona.nome[i]=' ';
    	}
    
    	for(i=0; i<20; i++){
                if(persona.cognome[i]=='\n') persona.cognome[i]=' ';
    	}
    
    	for(i=0; i<50; i++){
                if(persona.indirizzo[i]=='\n') persona.indirizzo[i]=' ';
    	}
    
    	fprintf(fp, "%s", persona.nome ); 
    	fprintf(fp, "%s", persona.cognome); 
    	fprintf(fp, "%s", persona.indirizzo); 
    	fprintf(fp, "%d\n", persona.codice_pers); 
    	
    	printf("\nSi desidera aggiungere un altro nominativo?\n"); 
    		
    	ancora = '0'; 
    
    	// Verifico che non vengano immessi altri carateri al di fuori di s,S,n,N  
    	while (ancora != 's' && ancora !='S' && ancora !='n' && ancora !='N') 
    	{ 
                printf ("Rispondere [S/N]: "); 
    	    scanf("%c",&ancora);
    	}
    		
    	while((getchar()) != '\n');
    	
        } while (ancora != 'n' && ancora != 'N'); 
    
        //chiudo il file 
        
        fclose(fp); 
    
    }
    un ultima cosa, siccome devo fare un ordinamento in base al codice persona all'interno del file, e inoltre dovrò modificare una persona o cancellarla del tutto, mi conviene di più che i dati siano disposti per riga o come nel formato di adesso uno sotto l'altro?
    In genere per queste cose si utilizzano i DATABASE (e non i files di testo)
    http://forum.html.it/forum/showthrea...62#post2943162
    CMQ, a scopo puramente didattico... credo che la "cosa"
    in generale la gestisci meglio inserendo i campi (nome, cognome, ecc...) come nel primo esempio (uno per riga)
    anche se forse per cancellare un intero RECORD è meglio
    inserire in ogni riga un singolo record (come nel secondo esempio).
    ...Terrible warlords, good warlords, and an english song

  10. #10
    Utente di HTML.it L'avatar di Grunt
    Registrato dal
    Dec 2001
    Messaggi
    246
    Secondo me fai prima ad usare fread e fwrite.
    Così usi una sola riga di codice per leggere/scrivere un'intera struct!

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.