Prosty kalkulator z funkcją switch; getchar

0

Cześć.
Program działa poprawnie do momentu, gdy należy wpisać cyfrę odwołującą do linijki 'case'; po wpisaniu którejś z cyfr program w tym momencie przeskakuje do końca instrukcji switch wyświetlając komunikat z default.

Getchar dobrze szczytuję liczbę (sprawdzone scanf).

#include <stdio.h>


int main(){
	int x;              //liczba calkowita I
	int y;              //liczba calkowita II
	char z;				

	printf("KALKULATOR OBSLUGUJE DZIALANIA: DODAWANIE, ODEJMOWANIE, MNOZENIE, DZIELENIE; \n\tNASTEPNIE PODAJE WYNIK ");

	//wczytywanie danych

	printf("\n\nPodaj x (liczbe calkowita w systemie dziesietnym):  ");  
	if (scanf("%d",&x)!=1 || getchar()!='\n'){    
		printf("Bledne dane.\n");
		printf("\nKoniec programu.\n");
		return 0;     
	}

	printf("Podaj y (liczbe calkowita w systemie dziesietnym):  ");  
	if (scanf("%d",&y)!=1 || getchar()!='\n'){    
		printf("Bledne dane.\n");
		printf("\nKoniec programu.\n");
		return 0;     
	}

	//wyswietlenie danych
	printf("\nOto Twoje dane:");
	printf("\nPodales x = %d\n",x);
	printf("Podales y = %d\n",y);

	//menu wyboru dzialan
	printf("\nProgram prosi o wybranie dzialania z menu wciskajac dla:\n");
	printf("Dodawania (1), odejmowania (2), mnozenia (3), dzieleni (4)\t");
	z=getchar();
	printf("\n\n%c\n\n",z);
	switch(z)
	{
	case 1:
		{
			printf("\nWybrales dodawanie, oto wynik:%d",x+y);
			break;
		}
	case 2:
		{
			printf("\nWybrales odejmowanie, oto wynik:%d",x-y);
			break;
		}
	case 3: 
		{
			printf("\nWybrales mnozenie, oto wynik:%d",x*y);
			break;
		}
	case 4: 
		{
			printf("\nWybrales dzielenie, oto wynik:%d",x/y);
			break;
		}
	default : 
		{
			printf("Nie znam takiego dzialania");
			break;
		}
	}

	printf("\n\nKoniec programu.\n");
	printf("Autor programu: Damian\n\n");
	return 0;   
}  
0

przeczytalem to 3 razy i nadal nie wiem co Ty chcesz osiagnac
PROGRAM DZIALA POPRAWNIE. Sam napisales ze podales zla liczbe i idzie do default. TO POPRAWNE ZACHOWANIE wiec wtf

1

Wyświetlasz sczytaną liczbę jako znak. Wyświetl sobie jako int (%d) i zobaczysz, że masz źle. Zapewne używasz ASCII, gdzie '0' to 48.

Masz do wyboru:

  1. case'y po '1' zamiast 1 itd,
  2. odjęcie od z '0', czyli z -= '0';,
  3. czytanie z jako inta.

1 użytkowników online, w tym zalogowanych: 0, gości: 1