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 '\n':
if (! empty())
printf("答えは%ldです\n", pop());
init();
break;
case ' ':
case '\t':
/*
何もしないで読みとばす */
break;
default:
printf("不正な文字がありました。\n");
printf("入力しなおして下さい。\n");
while ((c = getchar()) != EOF && c != '\n')
;
break;
}
}
}
}
少し省いてますが、逆ポーランド記法を実現するためにスタックを用いています。
この序盤に出てくるungetc(c.stdin)の存在意義がわかりません。ストリームから読み込んだ文字を戻すという事がいまいち掴めないのです。その後のscanfで打ち直してるのともリンクしません。ご回答よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー