Lettura file in una switch implementata in un while [C]

di il
7 risposte

Lettura file in una switch implementata in un while [C]

Ciao a tutti, ho un paio di problemi con un programma di interrogazione credito che dovrebbe leggere un file di tipo .dat e distinguere clienti con saldo positivo, negativo o uguale a 0. il primo è che legge silo i file con saldo positivo, il che non so se dipende da dome è stato scritto il file o dal programma di lettura. Il secondo è che il ciclo si blocca alla prima interrogazione e non mi da né la possibilità di uscire né la possibilità di scegliere un altra lista.
printf("Inserire lista richiesta\n"
               "1 - Lista clienti con saldo 0.\n"
               "2 - Lista clienti con saldo a credito.\n"
               "3 - Lista clianti con saldo a debito.\n"
               "4 - Chiusura programma.\n");
        scanf("%d", &lista);

        while(lista != 4){
         fscanf(cfPtr, "%d%s%f", &account, nome, &bilancio);

            switch(lista){
               case 1:
                printf("\nClienti con saldo a 0:\n");

                   while(!feof(cfPtr)){
                        if(bilancio == 0){
                            printf("%-10d%-13s%7.2f\n", account, nome, bilancio);
                            fscanf(cfPtr, "%d%s%f", &account, nome, &bilancio);
                     }}
                   break;

7 Risposte

  • Re: Lettura file in una switch implementata in un while [C]

    Il codice sorgente proposto è parziale e il file dati non è disponibile ... impossibile darti una risposta ...
    Ma l'hai scritto tu il codice?
  • Re: Lettura file in una switch implementata in un while [C]

    No, il codice l'ho preso da un sito ed è proprio quello che non mi spiego. In teoria il codice dovrebbe essere funzionante ma nei fatti non va.
    Il contenuto del file è questo:
    1 Hod 56.00
    2 Fred 0.00
    3 Gino -4.00
    5 Sam 89.00
    6 Yang 0.00
    7 Rey -98.00
    8 Tim 34.00
  • Re: Lettura file in una switch implementata in un while [C]

    E il codice completo qual è?

    Come usi il programma? Cosa succede?
  • Re: Lettura file in una switch implementata in un while [C]

    oregon ha scritto:


    E il codice completo qual è?

    Come usi il programma? Cosa succede?
    #include <stdio.h>
    
    int main(void)
    {
        int lista, account;
        char nome[30];
        float bilancio;
        FILE *cfPtr;
    
        if ((cfPtr = fopen("clients.dat", "r")) == NULL){
            printf("Il file non puo' essere aperto\n");
        }
        else{
            printf("Inserire lista richiesta\n"
                   "1 - Lista clienti con saldo 0.\n"
                   "2 - Lista clienti con saldo a credito.\n"
                   "3 - Lista clianti con saldo a debito.\n"
                   "4 - Chiusura programma.\n");
            scanf("%d", &lista);
    
            while(lista != 4){
             fscanf(cfPtr, "%d%s%f", &account, nome, &bilancio);
    
                switch(lista){
                   case 1:
                    printf("\nClienti con saldo a 0:\n");
    
                       while(!feof(cfPtr)){
                            if(bilancio == 0){
                                printf("%-10d%-13s%7.2f\n", account, nome, bilancio);
                                fscanf(cfPtr, "%d%s%f", &account, nome, &bilancio);
                            }
                       }
                       break;
                   case 2:
                    printf("\nClienti con saldo a credito:\n");
    
                       while(!feof(cfPtr)){
                            if(bilancio < 0){
                                printf("%-10d%-13s%7.2f\n", account, nome, bilancio);
                                fscanf(cfPtr, "%d%s%f", &account, nome, &bilancio);
                            }
                       }
                       break;
                   case 3:
                    printf("\nClienti con saldo a debito:\n");
    
                       while(!feof(cfPtr)){
                            if(bilancio > 0){
                                printf("%-10d%-13s%7.2f\n", account, nome, bilancio);
                                fscanf(cfPtr, "%d%s%f", &account, nome, &bilancio);
                            }
                       }
                       break;
                }
                rewind(cfPtr);
                printf("\n? ");
                scanf("%d", &lista);
            }
            printf("Chiusura programma.\n");
            fclose(cfPtr);
        }
        return 0;
    }
    
    e nell'exe:

    Inserire lista richiesta
    (liste)
    3

    Clienti con saldo a debito:
    1 Hod 56.00
  • Re: Lettura file in una switch implementata in un while [C]

    In tutti i casi la posizione della seconda fscanf è sbagliata. Deve leggere sempre dal file, a prescindere dalla if quindi la fscanf deve stare fuori dalla if. Ad esempio, nel caso 1
    
    				while(!feof(cfPtr)){
    					if(bilancio == 0){
    						printf("%-10d%-13s%7.2f\n", account, nome, bilancio);
    					}
    
    					fscanf(cfPtr, "%d%s%f", &account, nome, &bilancio);
    				}
    
  • Re: Lettura file in una switch implementata in un while [C]

    Quindi era solo un problema di graffe -.- !
    Funziona grazie per l'aiuto
  • Re: Lettura file in una switch implementata in un while [C]

    Di nulla ma non era un dettaglio... Le graffe sono decisive per il codice contenuto...
Devi accedere o registrarti per scrivere nel forum
7 risposte