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,