Kalkulator w języku C if

0

Witam, są to moje pierwsze kroki w programowaniu więc dużo się jeszcze uczę. Mam problem odnośnie tego że chciałem zrobić kalkulator w języku C z użyciem wyłącznie instrukcji if.

#include <stdio.h>


int main(void){
	int liczba1=0,liczba2=0, suma=0;
	int operator=0;
	printf("Podaj 1 liczbe: ");
	scanf("%d", &liczba1);
	printf("Podaj 2 liczbe: ");
	scanf("%d", &liczba2);
	printf("Podaj dzialanie: ");
	scanf("%d", &operator);
	
	if ( operator == '+'){
		suma=liczba1+liczba2;
		printf("Twoje działanie jest rowne: %d+%d=%d",liczba1,liczba2,suma);
	} else if  ( operator == '-') {
		suma=liczba1-liczba2;
		printf("Twoje działanie jest rowne: %d-%d=%d",liczba1,liczba2,suma);
		}
		else if  ( operator == '*') {
		suma=liczba1*liczba2;
		printf("Twoje działanie jest rowne: %d*%d=%d",liczba1,liczba2,suma);
		}
		else if  ( operator == '/') {
		suma=liczba1/liczba2;
		printf("Twoje działanie jest rowne: %d/%d=%d",liczba1,liczba2,suma);
		} 
		else 
		{	
		printf("Brak takiego dzialania");
	}
}
1

gdzie problem?

3

scanf("%d", &operator);

Wczytujesz liczbę, a chyba chcesz znak.

Awentualnie możesz zostawić jak jest ale zamiast + podajesz 43 XD

Dobrze się zapoznać z https://pl.wikipedia.org/wiki/ASCII

2

no i dzielenie ci pewnie nie zadziała w taki sposób jak to sobie wyobrażasz.

0

faktycznie z kodem ASCII dziala xd, z tego co kojarze to wlasnie nie da się wczytywać znaków więc operator dałem jako int

1

faktycznie z kodem ASCII dziala xd, z tego co kojarze to wlasnie nie da się wczytywać znaków więc operator dałem jako int

a coś w rodzaju

char operator;
scanf("%c", &operator);

?

0

to już wypisuje brak takiego działania gdy mam coś wpisać w podaj działanie. Możliwe że może to być wada też to co w printf wpisuje że %d+%d=%d a nie ma tam nigdzie tego %c

1

to już wypisuje brak takiego działania gdy mam coś wpisać w podaj działanie.

No tak, trzeba jeszcze wyczyścić buffor ze znaku nowej linii, czyli

	scanf("%*c");//czyści buffor
	scanf("%c", &operator);
1

dzieki wielkie dziala:) a o co chodzi dokladnie z tym czyszczeniem buforu?

0

a o co chodzi dokladnie z tym czyszczeniem buforu?

Jak wczytasz liczbę to tam dalej zostaje znak nowej linii, więc musisz go wczytać

0

czyli przed wczytywaniem znaków jak wczesniej byla inna zmienna to zawsze trzeba czyscic bufor?

1

Nie zawszeczasem Ci może zależeć na wczytywaniu bufora na raty — ale zazwyczaj tak. Szczególnie, jeśli istnieje ryzyko, że zostały w nim jakieś „śmieci”.

Poza tym — odpowiadaj proszę na temat przy użyciu „pełnoprawnych” postów. Komentarze są do drobnych uwag poza głównym wątkiem.

0

Poprawiona wersja. Nie poprawiłem formatowania, ale teraz przynajmniej program działa. Używając scanf ("%c", &znak) natrafisz na problemy przy dalszych odczytach danych wejściowych (ze względu na znak LF pozostały w buforze), więc tutaj prezentuję Ci jedno z rozwiązań.

#include <stdio.h>


int main(void){
	int liczba1=0,liczba2=0, suma=0;
	char operator[2], ok;
	printf("Podaj 1 liczbe: ");
	scanf("%d", &liczba1);
	printf("Podaj 2 liczbe: ");
	scanf("%d", &liczba2);
	printf("Podaj dzialanie: ");
	scanf("%1s", operator);
	ok = 1;
	if ( operator[0] == '+'){
		suma=liczba1+liczba2;
	} else if  ( operator[0] == '-') {
		suma=liczba1-liczba2;
		}
		else if  ( operator[0] == '*') {
		suma=liczba1*liczba2;
		}
		else if  ( operator[0] == '/') {
		if (liczba2)
		  suma=liczba1/liczba2;
		else {
		    puts ("Nie mozna dzielic przez zero!");
		    ok = 0;
		    }
		} 
		else 
		{	
		printf("Brak takiego dzialania\n");
		ok = 0;
	}
	if (ok) printf("Twoje działanie jest rowne: %d%c%d=%d",liczba1,operator[0],liczba2,suma);
		return 0;
}

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