Vorrei un chiarimento su questa struttura Switch

di il
8 risposte

Vorrei un chiarimento su questa struttura Switch

In pratica ho in parte costruito un programma, che visualizzi uno per volta se dall'intero inserito, costituito da piu cifre, esse siano pari o dispari, tramite visualizzazione, in ordine di lettura...in pratica, se inserisco 123487, il programma mi deve visualizzare, uno per volta, in base al numero letto, se pari o dispari...e ho fatto cosi...

#include <stdio.h>

int main()
{
	
	int grade;
  
printf("Inserisci un intero:");

while((grade = getchar()))	

switch(grade % 2){

case 0 :
printf("\n\nIl numero è pari");
break;

case 1:
printf("\n\nIl numero è dispari");
break;
		
case '\n' : case ' ' :
break;
}
	
return 0;
}



il problema è che in questo modo, l'ultimo valore letto, lo scrive due volte...e non capisco il motivo...cioè...se inserisco un numero composto da 5 cifre...otterrò 6 visualizzazioni...perchè?

8 Risposte

  • Re: Vorrei un chiarimento su questa struttura Switch

    Come termini la sequenza? con il newline giusto? ebbene il getchar trasforma il \n nel suo corripettivo int (10). quindi lo switch lo piglia come numero. basta mettere un if(grade != '\n') prima dello switch e sei a posto.
  • Re: Vorrei un chiarimento su questa struttura Switch

    Beh...si...però, cè il case che lo dovrebbe ignorare...sia ' ' che '\n'...no?
  • Re: Vorrei un chiarimento su questa struttura Switch

    No lo switch decide se il risultato sarà 0 oppure 1. quei case lì non sono mai raggiunti.
  • Re: Vorrei un chiarimento su questa struttura Switch

    Scusatemi, mi sono un po sbattuto su questa cosa del case per ignorare newline, e spazio...non capisco il motivo del perchè, quando lavoro con caratteri 'A', e inserendo appunto il case per ignorare i suddetti, lo faccia, e mentre invece, lo faccio con interi numerici, no...per capirsi, io ho questo esempio in codice:
    
    #include <stdio.h>
    
    int main(){
    
    int grade;
    
    int aCount=0, bCount=0, cCount=0, dCount=0;
    
    printf("Inserisci tutte le lettere dei voti(EOF=ctrl+d per terminare): ");
    
    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 '\n' : case ' ':
    			break;
    	
    default:
    	    
    			printf("\n\nIl valore inserito non è corretto, inseriscine un altro: ");
    			break;
    	}
    	}
    
    	printf("A: %d", aCount);
    	printf("\nB: %d", bCount);
    	printf("\nC: %d", cCount);
    	printf("\nD: %d", dCount);
    	
    	return 0;
    }
    
    
    e quando invece faccio una cosa simile:
    
    #include <stdio.h>
    
    int main()
    {
    	
    	int grade, pari, dispari;
    	
    	pari = 0;
    	dispari = 0;
      
    printf("Inserisci un intero:");
    
    	while((grade = getchar()) != EOF){	
    
    switch(grade % 2){
    
    case 0 :
    		pari++;
    break;
    
    case 1:
    		dispari++;
    break;
    		
    case '\n' : case ' ' :
    
    }
    	}
    	
    printf("\n\nI numeri dispari sono: %d", dispari);
    	
    printf("\n\nI numeri pari sono: %d", pari);
    	
    return 0;
    }
    
    non lo faccia...
  • Re: Vorrei un chiarimento su questa struttura Switch

    Modifica:
    
    #include <stdio.h>
    
    int main()
    {
       
       int grade, pari, dispari;
       
       pari = 0;
       dispari = 0;
     
    printf("Inserisci un intero:");
    
       while((grade = getchar()) != EOF){   
     if(grade != '\n' && grade != ' ')
    switch(grade % 2){
    
    case 0 :
          pari++;
    break;
    
    case 1:
          dispari++;
    break;
    
    }
       }
       
    printf("\n\nI numeri dispari sono: %d", dispari);
       
    printf("\n\nI numeri pari sono: %d", pari);
       
    return 0;
    }
    
  • Re: Vorrei un chiarimento su questa struttura Switch

    Ok, ti ringrazio sky...ma quello avevo capito...solo per pignoleria, non capisco ,perchè, nel codice costituito da interi numerici che è proporzionalmente lo stesso di quello fatto con caratteri...la stessa struttura che serve ad ignorare, in quella letterale, funziona, in quella numerica, no...perchè??non sono riuscito a capirlo...
  • Re: Vorrei un chiarimento su questa struttura Switch

    Il '\n' è un carattere ASCII di valore 10. Nel caso int questo viene convertito in 10. Nel caso char non viene convertito e lo puoi bennissimo usare nello switch.
  • Re: Vorrei un chiarimento su questa struttura Switch

    Ok...adesso si mi torna la cosa...perfetto...in effetti nel volume è anche specificato...e avevo intuito qualcosa del genere...ma volevo conferme..ok...perfetto sky, grazie ancora, anche a tutti gli altri che hanno preso in considerazione, i miei perchè...
Devi accedere o registrarti per scrivere nel forum
8 risposte