Problema variabile nel costrutto Switch

di Anonimizzato18613 il
4 risposte
Ho creato un nuovo thread e spero che anche il titolo vada meglio

Ho riscontrato altre difficoltà riguardo a dei programmi in C (non sapevo se continuare a utilizzare questa discussione o aprirne una nuova).

Il programma è simile a quello precedente:
Scrivere un programma che prenda in input il valore di una casa e il codice della zona in cui si trova (1, 2, 3 o 4).
Il programma deve calcolare la tassa di proprieta' come percentuale del valore della casa.
In zona 1, la percentuale e' 5%.
In zona 2, la percentuale e' 10%.
In zona 3, la percentuale e' 15%.
In zona 4, la percentuale e' 20%.
Il programma deve visualizzare l'importo della tassa se la zona varia tra 1 e 4, altrimenti un messaggio di errore.

Questo è il programma che ho scritto:
#include<stdio.h>
void main ()
{
	float v, t;
	char z;

	printf("Inserire valore della casa:\n");
	scanf("%f",&v);
	printf("Inserire numero zona:\n");
	scanf("\n%c",&z);
	
	switch(z)
	{
		case'1':t=(v*5)/100;
			  printf("La tassa e' di %f", t);
		break;
		case'2':t=(v*10)/100;
			  printf("La tassa e' di %f", t);
		break;
		case'3':t=(v*15)/100;
			  printf("La tassa e' di %f", t);
		break;
		case'4':t=(v*20)/100;
			  printf("La tassa e' di %f", t);
		break;
		default:printf("Errore: zona sconosciuta.\n");
	}
}
Il codice funziona, se non per il fatto che quando inserisco la zona, se scrivo per esempio 12 (zona non accettabile) mi viene calcolata la tassa nella zona 1; se scrivo 22 viene calcolata nella zona 2 e così via. Se invece inserisco nel mezzo un numero dal 5 in poi ricevo giustamente un errore (per esempio 15 o 25). C'è un modo per evitare ciò? Ho provato ad utilizzare una variabile intera invece che char ma il programma una volta inserita la zona salta direttamente all'errore.

4 Risposte

  • Se usi un char allora devi inserire un solo char. Se prevedi che l'input possa essere diverso, allora untilizza un int e la %d nella scanf. A questo punto nella switch elimina gli apici nei case ' ' e funzionerà.
  • Quindi il problema erano solo gli apici Grazie mille.
  • No ... non erano solo gli apici ... non hai capito ...
  • Sì, intendevo che quando inizialmente mettevo una variabile intera il programma non funzionava correttamente perchè lasciavo gli apici come con le variabili char, mentre mi bastava toglierli per non ottenere errori.
Devi accedere o registrarti per scrivere nel forum
4 risposte