Grade = getchar()

di il
3 risposte

Grade = getchar()

Salve, sapreste dirmi perchè inserendo la Z maiuscola come char di chiusura in questo codice: va tutto bene.

// ESERCIZIO 4.30: Sostituzione di SWITCH con IF...ELSE.
//

// 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 (Z per terminare).\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() ) != 'Z' ) {
        if ( grade == 'A' || grade == 'a' ) {
                ++aCount;
        } else {
            if ( grade == 'B' || grade == 'b') {
                ++bCount;
            } else {
                if ( grade == 'C' || grade == 'c') {
                  ++cCount;
              } else {
                  if ( grade == 'D' || grade == 'd') {
                    ++dCount;
                } else {
                    if ( grade == 'F' || grade == 'f') {
                        ++fCount;
                    } else {
                        if ( grade == '\n' || grade == '\t' || grade == ' ' ) {
                            ;   
                        } else { 
                            if ( grade != 'Z' ) {
                                puts( "Hai inserito un voto non corretto. Inserisci un voto corretto ( A,B,C,D,F ) (Z per terminare)" );
                            } else {
                                ;
                            }
                        }
                    }
                }
            }
        }
    }
  }

    // Riepilogo dei risultati.
    puts( "\nRiepilogo 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 );

}
      
      
// || ( grade = getchar() ) != 'z' 
// || grade != 'z'
In questo codice avrei voluto immettere come condizione di chiusura while ( ( grade = getchar() ) != 'Z' || ( grade = getchar() ) != 'z) {etc..]
e
if ( grade != 'Z' || grade != 'z' ) {etc]
ma non va... volevo cioè far chiudere il ciclo sia con la Z maiuscola che con la z minuscola.
Grazie. Ciao.

3 Risposte

  • Re: Grade = getchar()

    Puoi leggere grade all'interno del ciclo:
    grade=' ';
    while( ..... )
    {
    	grade = getchar();
    come condizione del ciclo attenzione non devi usare ||, ma &&
    while ( ( grade != 'Z' ) && ( grade != 'z) )
  • Re: Grade = getchar()

    candaluar ha scritto:


    Puoi leggere grade all'interno del ciclo:
    grade=' ';
    while( ..... )
    {
    	grade = getchar();
    come condizione del ciclo attenzione non devi usare ||, ma &&
    while ( ( grade != 'Z' ) && ( grade != 'z) )
    Ma && non sta per "entrambe vere" e || per "almeno una vera"??....
    Cosa risolvo leggendo grade all'interno del ciclo? diciamo che è differente solo esteticamente ma non mi risolve il problema di poter chiudere anche con la z minuscola... Z non è tra i possibili voti ma dato che si considerano lettere maiuscole e lettere minuscole volevo includere l'opportunità che l'utente mettesse z per sbaglio ed il programma chiudesse lo stesso il ciclo invece che dare come output che non è un valore ammesso.
    Grazie.
  • Re: Grade = getchar()

    Non é la stessa cosa.
    tu chiami due volte getchar() e richiedi quindi due volte l'input all'utente.
    per la && tu devi rimanere nel ciclo se il carattere é diverso da Z E é diverso da z
Devi accedere o registrarti per scrivere nel forum
3 risposte