Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it L'avatar di gobbo89
    Registrato dal
    Jun 2006
    Messaggi
    816

    [C] Switch case con interi VS IF con char

    Ciao.

    Ho questo dubbio: dovendo scrivere un programma nel quale si chiede all'utente di inserire un intero, corrispondente ad una certa operazione, ho inizialmente scritto una struttura di questo tipo:
    codice:
    #import <stdio.h>
    int main(){
    	int i = 0;
    	while(i!=4){
    		printf("Inserisci un intero da 1 a 3, 4 per uscire\n");
    		scanf("%d", &i);
    		switch(i){
    			case 1:
    				printf("Caso 1\n");
    				break;
    			case 2:
    				printf("Caso 2\n");
    				break;
    			case 3:
    				printf("Caso 3\n");
    				break;
    			case 4:
    				break;
    			default:
    				printf("Operazione non valida!\n");
    				break;
    		}
    	}
    	return 0;
    }
    Ho notato però che, inserendo un carattere (non un numero intero per intenderci), si verifica un comportamento in desiderato: il programma entra in loop e esegue continuamente le printf di "Inserisci un intero da 1 a 4" e "Operazione non valida!".

    Avrei risolto usando una struttura completamente differente:
    codice:
    #import <stdio.h>
    #import <string.h>
    int main(){
    	char input[3];
    	while(strcmp(input, "4")!=0){
    		printf("Inserisci un intero da 1 a 3, 4 per uscire\n");
    		scanf("%s", input);
    		if(strcmp(input, "1")==0){
    			printf("Caso 1\n");
    		} else if(strcmp(input, "2")==0){
    			printf("Caso 2\n");
    		} else if(strcmp(input, "3")==0){
    			printf("Caso 3\n");
    		} else if(strcmp(input, "4")!=0){
    			printf("Operazione non valida!\n");
    		}
    	}
    	return 0;
    }
    Mi chiedo però se sia corretto agire in questo modo. Non c'è una soluzione differente che mi consenta di usare uno switch con gli interi senza dover utilizzare if e char?

    Grazie,

  2. #2
    Si, controlli l'input.
    codice:
    int main(){
    	int i = 0;
    	while(i!=4){
    		printf("Inserisci un intero da 1 a 3, 4 per uscire\n");
    		if(!scanf("%d", &i)) {
    		    printf("Hai inserito una lettera!\nRiprova!\n");
    		    fflush(stdin);
    		}else
                switch(i){
                    case 1:
                        printf("Caso 1\n");
                        break;
                    case 2:
                        printf("Caso 2\n");
                        break;
                    case 3:
                        printf("Caso 3\n");
                        break;
                    case 4:
                        break;
                    default:
                        printf("Operazione non valida!\n");
                        break;
                }
    	}
    	return 0;
    }
    scanf è una funzione che restituisce 1 se il valore inserito è coerete con il tipo di dato nel quale dovrà risiedere, zero altrimenti.

  3. #3
    Utente di HTML.it L'avatar di gobbo89
    Registrato dal
    Jun 2006
    Messaggi
    816
    E' vero non ci avevo pensato

    In ogni caso con il tuo codice il loop rimane, vedrò di lavorarci. Grazie.

  4. #4
    Se vuoi che esca metti un break

  5. #5
    Utente di HTML.it L'avatar di gobbo89
    Registrato dal
    Jun 2006
    Messaggi
    816
    Originariamente inviato da codesnippet
    Se vuoi che esca metti un break
    Il comportamento corretto sarebbe avvertire che è stata inserita una lettera, e riproporre la scelta...

  6. #6
    Ma è quello che fa

  7. #7
    Utente di HTML.it L'avatar di gobbo89
    Registrato dal
    Jun 2006
    Messaggi
    816
    Guarda, a me non lo fa assolutamente

    Inserita una lettera, entra in loop esattamente come illustrato nel mio primo post.

  8. #8
    Sei sicuro? Ti invito a ricontrollare.
    codice:
    Inserisci un intero da 1 a 3, 4 per uscire
    d
    Hai inserito una lettera!
    Riprova!
    Inserisci un intero da 1 a 3, 4 per uscire
    d
    Hai inserito una lettera!
    Riprova!
    Inserisci un intero da 1 a 3, 4 per uscire
    1
    Caso 1
    Inserisci un intero da 1 a 3, 4 per uscire

  9. #9
    Utente di HTML.it L'avatar di gobbo89
    Registrato dal
    Jun 2006
    Messaggi
    816
    Ho nuovamente controllato e non funziona...

    Che compilatore usi, su che so stai lavorando?

  10. #10
    gcc su windows. Come IDE uso Code::Blocks. Ma c'entra poco, la soluzione è portabile.

    A questo punto mi viene da chiedere se hai ricompilato il progetto. A proposito, che IDE usi?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.