Problema di EOF e di codice sorgente??

di il
6 risposte

Problema di EOF e di codice sorgente??

Ciao a tutti.

Ho un problema con la funzione switch: tutto funziona correttamente quando vengono catturate le lettere da getchar(), se rientro nel caso default di switch esce, come programmato il messaggio di errore, ma SE FACCIO <Ctrl>z ( EOF ) non mi da il riepilogo dei voti... com mai???

Riporto printscreen:
http://prntscr.com/fq05w

e codice sorgente:

// Usare l'istruzione switch per contare il numero di volte che ogni singolo voto a lettera ( A,B,C,D o F ) è stato ottenuo dagli studenti in un esame.

#include <stdio.h>
int main( void )
{
    puts( "Inserire, per piacere, i voti a lettera degli studenti; verrà restituito il riepilogo dei risultati.\n" );
    
    // Per il riepilogo dei risultati, definiamo le variabili contatore per A,B,C,D,F.
    unsigned int aCount = 0;
    unsigned int bCount = 0;
    unsigned int cCount = 0;
    unsigned int dCount = 0;
    unsigned int fCount = 0;
    
    // Definiamo la variabile grade che sarà di tipo getchar() in modo da poter catturare il carattere inserito.
    unsigned int grade;
    
    // Definiamo il ciclo while per il sottociclo switch.
    while ( ( grade = getchar() ) != EOF ) {
      
    
        switch ( grade ) {
          
            case 'A':
            case 'a':
                ++aCount;
                break;
            
            case 'B':
            case 'b':
                ++bCount;
                break;
              
            case 'C':
            case 'c':
                ++cCount;
                break;
              
            case 'D':
            case 'd':
                ++dCount;
                break;
                
            case 'F':
            case 'f':
                ++fCount;
                break;
                
            case '\n':
            case '\t':
            case ' ':
                break;
                
            default:
                puts( "Hai inserito un voto non corretto. Inserisci un voto corretto ( A,B,C,D,F )" );
                break;
        }
        
    }
    
    // Riepilogo dei risultati.
    puts( "Riepilogo dei risultati:\n" );
    printf( "A:\t\t%u\nB:\t\t%u\nC:\t\t%u\nD:\t\t%u\nF:\t\t%u\n", aCount, bCount, cCount, dCount, fCount );

}
      
Grazie.....

6 Risposte

  • Re: Problema di EOF e di codice sorgente??

    Gerchar torna un signed int, non un unsigned int. EOF, tipicamente, è un valore negativo e quindi non riuscirai mai a terninare il ciclo confrontando mele e pere...
  • Re: Problema di EOF e di codice sorgente??

    Come si vede dal printscreen: https://prnt.sc/frg7x
    e dal codice sotto:
    
    // Usare l'istruzione switch per contare il numero di volte che ogni singolo voto a lettera ( A,B,C,D o F ) è stato ottenuo dagli studenti in un esame.
    
    #include <stdio.h>
    int main( void )
    {
        puts( "Inserire, per piacere, i voti a lettera degli studenti; verrà restituito il riepilogo dei risultati.\n" );
        
        // Per il riepilogo dei risultati, definiamo le variabili contatore per A,B,C,D,F.
        int aCount = 0;
        int bCount = 0;
        int cCount = 0;
        int dCount = 0;
        int fCount = 0;
        
        // Definiamo la variabile grade che sarà di tipo getchar() in modo da poter catturare il carattere inserito.
        int grade;
        
        // Definiamo il ciclo while per il sottociclo switch.
        while ( ( grade = getchar() ) != EOF ) {
          
        
            switch ( grade ) {
              
                case 'A':
                case 'a':
                    ++aCount;
                    break;
                
                case 'B':
                case 'b':
                    ++bCount;
                    break;
                  
                case 'C':
                case 'c':
                    ++cCount;
                    break;
                  
                case 'D':
                case 'd':
                    ++dCount;
                    break;
                    
                case 'F':
                case 'f':
                    ++fCount;
                    break;
                    
                case '\n':
                case '\t':
                case ' ':
                    break;
                    
                default:
                    puts( "Hai inserito un voto non corretto. Inserisci un voto corretto ( A,B,C,D,F )" );
                    break;
            }
            
        }
        
        // Riepilogo dei risultati.
        puts( "Riepilogo dei risultati:\n" );
        printf( "A:\t\t%d\nB:\t\t%d\nC:\t\t%d\nD:\t\t%d\nF:\t\t%d\n", aCount, bCount, cCount, dCount, fCount );
    
    }
          
    
    anche sostituendo le variabili unsigned int con int il problema dell' EOF persiste.... chissà se riuscirò ad avere il riepilogo dell'esame di questi studenti!!....

    Grazie... Se avete qualche suggerimento è ben accetto ...
  • Re: Problema di EOF e di codice sorgente??

    Ma stai lavorando con Windows ?
  • Re: Problema di EOF e di codice sorgente??

    Se sei su Linux devi usare CTRL-D per generare EOF.
  • Re: Problema di EOF e di codice sorgente??

    Si, su windows...
  • Re: Problema di EOF e di codice sorgente??

    Quindi

    F6
    Invio
Devi accedere o registrarti per scrivere nel forum
6 risposte