課題の期限も迫っているので皆様のお力を貸していただけませんでしょうか。
#include<stdio.h>
#include<stdlib.h>
/*外部変数*/
char stack[100];
int sp;
/*スタックポインタを初期化する関数init_stack*/
void init_stack(void)
{
sp = -1;
}
/*スタックにデータをひとつ入れる関数push*/
void push(int a)
{
sp += 1;
stack[sp] = a;
}
/*スタックからデータをひとつ取り出す関数pop*/
int pop()
{
int n;
if(sp > -1){
n = stack[sp];
sp -= 1;
printf("%d",n);
}
else{
printf("-\n");
}
return n;
}
/*スタックに収納された値をすべて表示する関数show_stack*/
void show_stack()
{
int i;
for(i = 0;i < sp + 1 ; i++){
printf("%d ",stack[i]);
}
printf("\n");
}
int main(void)
{
char expr[SIZE];
int tmp;
int k,i;
int suuti;
char a = '+';
char s = '-';
char m = '*';
char d = '/';
printf("これから作成したプログラムの動作の確認をします.\n");
printf("計算したい逆ポーランド式を入力してください。\n");
scanf("%s",expr);
k = strlen(expr);
for(i = 0;i < k; i++){
if(expr <= 9 , expr >= 0){
suuti = atoi(expr);
push(suuti);
}
else if(strcmp(expr,a)==0){
push(pop() + pop());
}
else if(strcmp(expr,s)==0){
push(-pop() + pop());
}
else if(strcmp(expr,m)==0){
push(pop() * pop());
}
else if(strcmp(expr,d)==0){
tmp = pop();
push(pop() / tmp);
}
}
printf("入力された逆ポーランド式の計算の答えは");
show_stack();
printf("です。\n");
return 0;
}