Kalkulator w pętli for i instrukcji switch

0

Wpadłem na pomysł aby napisać sobie prosty kalkulator z użyciem pętli for i instrukcji switch. Lecz problem jest tego typu że program działa mi tylko dla 3 działań. Oto kod

#include<stdio.h>
//#include<string.h>
#include<math.h>
int main()
{
	int a, b;
	char operator[] = {"+,-,*,/"};
	int i;
	printf("Podaj liczbe a\n");
	scanf("%d", &a);
	printf("Podaj liczbe b\n");
	scanf("%d", &b);
	for(i = 0; i <= 4; i++)
	{
		switch(operator[i])
		{
		case '+': printf("Suma:%d\n", a+b);break;
		case '-': printf("Różnica:%d\n", a-b);break;
		case '*': printf("Iloczyn:%d\n", a*b); break;
		case '/': printf("Iloraz:%d\n", a/b); break;
		}
	}
}

Ktoś wie czemu tak jestZrzut ekranu z 2021-11-18 17-45-56.png

2

Skoro powstawiałeś przecinki jako znaki, to znakiem na pozycji 4 jest *
Nie sprawdzasz nic dalej.

0

A jak mogę to naprawić?

0

Dobra ok. Już działa. Dzięki

0

A mam jeszcze taki małe pytanie. Jeśli na podstawie powyższego kodu chciałbym dać użytkownikowi możliwość wyboru to czy jest taka szansa? Oczywiście z zachowaniem tej tablicy i pętli for

0

Wyboru, czego?

0

Możliwość wyboru operatora

0

To w pętli, zmienna, zapytanie usera, i w zależności od odpowiedzi odpowiednia akcja; nawiasem pisząc, zapytanie o operator to mało - niech user poda jeszcze operandy.

3

Może if(scanf("%d %c $d",&a.&op,&b)==3) ... ?

0

Może jeszcze raz opisze o co dokładnie mi chodzi. Chce zrobić tak że pytam użytkownika o operator jakiego chce użyć do wykonania działania. Pobieram od niego ten operator i wykonuje się działanie. Przykładowo wybrał + i tylko z tym operatorem moge wykonać operacje na dwóch liczbach. Pozostałe czyli(różnica, iloczyn i iloraz) się nie wykonują i tak dla każdego operatora. Pisaliśmy taki program na zajęciach z wykładowcą. Teraz chce to samo zrobić tylko swoją wersją

0

Co się stanie, jak użytkownik będzie chciał podzielić przez zero?

1

Czy dobrze rozumiem że teraz chcesz aby my to napisaliśmy?

#include <stdio.h>

typedef bool Check(double,double);
typedef double Calc(double,double);

double add(double a,double b) { return a+b; }
double sub(double a,double b) { return a-b; }
double mul(double a,double b) { return a*b; }
double div(double a,double b) { return a/b; }

bool checkdiv(double a,double b) { return b; }
bool checkall(double a,double b) { return true; }

struct { char sign; Calc *calc; Check *check; } operators[]
{
	{'+',&add,&checkall},
	{'-',&sub,&checkall},
	{'*',&mul,&checkall},
	{'/',&div,&checkdiv},
};

int main ( )
{
	char sign;
	for(double a,b;(printf("Podaj wyrazenie matematyczne (np 2+2): "))&&(scanf("%lf %c%lf",&a,&sign,&b)==3);)
	{
		int found;
		for(int i=found=0;i<sizeof(operators);++i)
		{
			if(operators[i].sign==sign)
			{
				found=1;
				if(operators[i].check(a,b)) printf("%g%c%g=%g\n",a,sign,b,operators[i].calc(a,b));
				else printf("Cholero, nie dziel przez zero!\n");
			}
		}
		if(!found) printf("Nieznana operacja\n");
	}
	return 0;
}
0

Żeby w tym kodzie użyć instrukcji warunkowych

#include<stdio.h>
//#include<string.h>
#include<math.h>
int main()
{
    int a, b;
    char operator[] = {"+,-,*,/"};
    int i;
    printf("Podaj liczbe a\n");
    scanf("%d", &a);
    printf("Podaj liczbe b\n");
    scanf("%d", &b);
    for(i = 0; i <= 4; i++)
    {
     if(){
    //tutaj jakiś kod
     }
        switch(operator[i])
        {
        case '+': printf("Suma:%d\n", a+b);break;
        case '-': printf("Różnica:%d\n", a-b);break;
        case '*': printf("Iloczyn:%d\n", a*b); break;
        case '/': printf("Iloraz:%d\n", a/b); break;
        }
    }
}
1

Wczytaj znak operacji po czym switch wg podanego znaku.

0

Widząc jak używasz pętli for i zmiennej operator poniższa definicja nie jest prawidłowa:

char operator[] = {"+,-,*,/"}; // źle

w ten sposób definiujesz operator przecinek ,, który jest bez sensu. Oto dwie poprawne definicje:

char operator[] = {'+','-','*','/'};
char operator[] = "+-*/";

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