逆ポーランド記法での電卓をつくっているのですが'+', '-', '*', '/', '=', 'd' : sp=0が繰り返し出ているだけで、答えが出ないです。
教えてください。検索してみたのですがいまいちわからないです。
#include<stdio.h>
#define SIZE 5
double stack[SIZE];
int sp;
void push(double value);
double pop(void);
int isFull(void);
int isEmpty(void);
void display(void);
void initialize(void);
int main(void)
{
initialize();
double data;
double cal1, cal2;
char resp;
while(1){
printf(" '+', '-', '*', '/', '=', 'd' : ");
scanf("%c", &resp);
if( resp == '=' ) break;
switch(resp){
case '+':
cal1=pop();
cal2=pop();
push(cal1+cal2);
break;
case '-':
cal1=pop();
cal2=pop();
push(cal1-cal2);
break;
case '':
cal1=pop();
cal2=pop();
push(cal1cal2);
break;
case '/': cal1 = pop();
cal2 = pop();
push( cal2 / cal1 );
break;
case 'd': printf("data : "); scanf("%lf", &data);
push( data );
break;
}
printf("sp=%d\n", sp);
}
display();
return 0;
}
void push(double value)
{
if( isFull() ){
printf("スタックが満杯で入りませんでした\n");
}else{
stack[sp++] = value;
}
}
double pop(void)
{
if(sp<=0)return 0;
sp--;
return stack[sp];
}
int isFull(void)
{
if(sp>=SIZE){
return 1;
}
return 0;
}
int isEmpty(void)
{
if(sp <= 0){
return 1;
}else{
return 0;
}
}
void display(void)
{
printf("\n");
for(int i=0; i<sp; i++){
printf("stack[%d]=%lf \n", i, stack[i]);
}
}
void initialize(void)
{
sp = 0;
}
エラー文
'+', '-', '', '/', '=', 'd' : sp=1
'+', '-', '', '/', '=', 'd' : sp=1
'+', '-', '', '/', '=', 'd' : sp=1
'+', '-', '',
ideoneを使用してWindowsで動かしています。
あなたの回答
tips
プレビュー