3桁以上になったり、沢山の数値を計算をしようとするとうまくいきません。
解決法がわかる方がいらっしゃいましたら教えていただければ幸いです。
よろしくお願いします。
また、数値間のみの区切りとして'z'を挿入し、区切り文字までは
ひとつの数値としてます。
#include <stdio.h>
#include <stdlib.h>
void init_stack();
int push(int);
int pop();
int stack[100];
int sp;
char expr[100];
int main(){
int i=0,j=0,a,b,c;
char ch;
//数値の外部入力
printf("入力:");
fgets(expr,20,stdin);
init_stack();
while(expr[j]!='\n'){
printf("%c",expr[j]);
j++;
}
printf("\n\n");
while(expr[i]!='\n'){
if(expr[i]=='+'){
b=pop();
a=pop();
c=a+b;
printf("a=%d\n",a);
printf("b=%d\n",b);
printf("a+b=%d\n\n",c);
}else if(expr[i]=='-'){
b=pop();
a=pop();
c=a-b;
printf("a=%d\n",a);
printf("b=%d\n",b);
printf("a-b=%d\n\n",c);
}else if(expr[i]=='*'){
b=pop();
a=pop();
c=a*b;
printf("a=%d\n",a);
printf("b=%d\n",b);
printf("a*b=%d\n\n",c);
}else if(expr[i]=='/'){
b=pop();
a=pop();
c=a/b;
printf("a=%d\n",a);
printf("b=%d\n",b);
printf("a/b=%d\n\n",c);
}else if(expr[i]=='z'){
b=pop();
a=pop()*10;
c=a+b;
}else {
ch=expr[i];
c=atoi(&ch);
}
push(c);
i++;
}
printf("A. %d\n",stack[sp-1]);
}
//スタック初期化
void init_stack(){
sp=-1;
}
//スタックにプッシュ
int push(int n){
stack[sp]=n;
sp++;
return 0;
}
//ポップする
int pop(){
sp--;
return (stack[sp]);
}