Problema lettura da file c

di il
1 risposte

Problema lettura da file c

Buonasera a tutti ragazzi ho un problema. Dovrei leggere da file tutte le variabili che vedete nella struttura cliente, praticamente quando vado a stampare mi accorgo che memorizza tutti i dati in cognome? Cosa sbaglio? Sicuramente mi sta sfuggendo qualche cavolata.


#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define fflush(stdin) while ((getchar()) != '\n')


struct cliente_s{

    char cognome[20];
    char nome[20];
    char cod_fis[16];
    char email[20];
    char num_conto[10];
    char user_name[10];
    char pass[10];
    struct cliente_s *next;


};

typedef struct cliente_s cliente;

cliente *acquisisci(FILE *file, cliente *head){
    printf("Sono nella funzione");
    file=fopen("clienti.txt","r");
    cliente *el;
    el=(cliente*)malloc(sizeof(cliente));
    while((fscanf(file,"%20c %20c %16c %20c %10c %10c %10c\n",el->cognome,el->nome,el->cod_fis,el->email,el->num_conto,el->user_name,el->pass)!=EOF)){
       // printf("%s",el->cognome);
        if (head==NULL){
            head=el;
            head->next=NULL;
            el=(cliente*)malloc(sizeof(cliente));

        }else{
            el->next=head;
            head=el;
            el=(cliente*)malloc(sizeof(cliente));

        }

    }
    return head;


}

typedef struct cliente_s cliente;

int main()
{
    int scelta;
    cliente *head_clienti=NULL,*el=NULL;
    FILE *clienti;
    do{

    printf("1)Acquisci lista clienti da file");
    printf("2)Stampa lista clienti: ");
    printf("\nDigita la tua scelta: ");
    scanf("%d",&scelta);
    fflush(stdin);

    switch(scelta){

        case 1:
            printf("Sono nel case");
            head_clienti=acquisisci(clienti,head_clienti);


        break;

        case 2:
            el=head_clienti;
            while(el->next!=NULL){
                printf("%s",el->cognome);
                el=el->next;
            }
        break;



    }



    }while(scelta!=0);
}


1 Risposte

  • Re: Problema lettura da file c

    Purtroppo non riesco a provare quanto ti dirò.
    Devi usare lo specificatore %19s : 19 perché devi considerare lo spazio per il terminatore: le tue stringhe possono contenere al massimo 19 caratteri utili (a meno di non predisporre degli accorgimenti per usare anche il 20mo carattere).
    Inoltre controlla il valore di ritorno di malloc().
    Infine, al posto di fscanf prova ad usare fgets + sscanf: il vantaggio é che puoi riconoscere gli errori di lettura dagli errori nel formato del record.
Devi accedere o registrarti per scrivere nel forum
1 risposte