(9+8)-6*3/9 ↓
input: 98+63*9/-=
output: 15
となるように書き換えたり、消したりしたのですが、結局よくわからず、コンパイルできるけどどうやってもstderrとでてしまいます。
条件1:扱う数字は1つのみ。
条件2:空白による区切りを使わない。
なのですが、どこをどう直せばいいのか、ご教授お願いします。
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
typedef long ELEM; /*スタックの要素の型*/
#define STACK_SIZE 100 /*スタックの大きさ*/
ELEM stack[STACK_SIZE]; /*スタックの定義*/
int n; /*スタックポインタ*/
/*エラーメッセージをプリントしてexit*/
void error(){
printf("stderr");
exit(1);
}
/*スタックの初期化*/
void init(){
n = 0;
}
/*スタックにデータを積む*/
void push(ELEM x){
if(n >= STACK_SIZE) error();
stack[n++] = x;
}
/*スタックからデータを降ろす*/
ELEM pop(){
if(n <= 0) error();
return stack[--n];
}
/*スタックが空かどうかを調べる*/
/*空なら1,空でなければ0を返す*/
int empty(){
return n==0;
}
/*********************************************************************/
/*逆ポーランド電卓プログラム*/
main(){
int c;
long x,a,b;
init();
while ((c=getchar()) != EOF){
if(isdigit(c)){
ungetc(c,stdin);
scanf(" %ld",&x);
push(x);
}
else{
switch(c){
case '+':
b = pop();
a = pop();
push(a + b);
break;
case '-':
b = pop();
a = pop();
push(a - b);
break;
case '*':
b = pop();
a = pop();
push(a * b);
break;
case '/':
b = pop();
a = pop();
push(a / b);
break;
case '=':
if(! empty())
printf("答えは%ldです\n",pop());
init();
break;
case ' ':
case '\n':
case '\t':
/*何もせず読みとばす*/
break;
default:
printf("不正な文字がありました。\n");
printf("入力資なおして下さい。\n");
while((c = getchar()) != EOF && c != '\n');
break;
}
}
}
}