#include <stdio.h>
#include <stdlib.h>
#define N 5
void get_num(float *num);
char get_char();
float divide(float a, float b);
int main()
{
float wynik,a;
float toadd=0.0;
float tmp_help;
int last_plus=0, last_minus=0;
char z;
char last_char;
get_num(&wynik);
int i=1;
do
{
z = get_char();
if(z!='=')
{
get_num(&a);
i++;
}
switch(z)
{
case '+':
if(last_char=='*' || last_char=='/')
{
wynik += toadd;
// if(last_minus)
// wynik = -wynik;
toadd=0;
}
toadd += wynik;
wynik=a;
last_plus =1;
last_minus=0;
break;
case '-':
if(last_char=='*' || last_char=='/')
{
wynik += toadd;
// if(last_minus)
// wynik = -wynik;
toadd=0;
}
toadd += -wynik;
wynik=-a;
last_plus =0;
last_minus=1;
break;
case '*':
wynik*=a;
break;
case '/':
wynik = divide(wynik,a);
break;
case '=':
tmp_help = wynik;
wynik += toadd;
//toadd=0;
break;
default:
if(z!='=')
puts("Bledny znak");
}
// }
last_char = z;
}while((z!='=') && (i<N));
if(last_char=='+')
wynik+=toadd;
else if(last_char=='-')
wynik+=toadd;
printf("Wynik przed: %f\n",tmp_help);
printf("Wynik: %lf",wynik);
printf("\nToadd: %f",toadd);
return 0;
}
void get_num(float *num)
{
printf("Podaj liczbe:\n");
scanf("%f",num);
}
char get_char()
{
char ch;
printf("Podaj znak:\n");
scanf(" %c",&ch);
return ch;
}
float divide(float a, float b)
{
if(a==0.0)
puts("Nie dziel przez 0");
else
return(a/b);
}
Mam mały problem z kalkulatorem konsolowym pisanym w C. Ma on wyświetlać odpowiednio wynik po wpisaniu "=" bądź wprowadzeniu 5 liczb. To jak i inne rzeczy zrobione. Problem jest jednak z kolejnością wywoływania działań. Działa to już dla np. 2+22 lub 2+332 ale dla -2-33+6433-2 już niestety nie.
Wiem, że kod pewnie jest chaotyczny ale testowałem tutaj dużo i część wychodziła jednak nie do końca.
Z góry dziękuje za pomoc.