#include <stdio.h>
#define SIZE 10
double stack[SIZE];
int sp;
void push(double value);
double pop(void);
int isFull(void);
int isEmpty(void);
void answer(void);
void rest(void);
int main(void)
{
rest();
while(1){
int resp;
double x, a1, a2;
// オペレーションの選択を促すメッセージ
printf("操作を選んでください (1: +, 2: -, 3: *, 4: /, 5: 入力, 9: 結果表示): ");
// scanf の戻り値を確認
if (scanf("%d", &resp
) != 1) { printf("入力エラー。再度入力してください。\n"); // 入力に失敗した場合、バッファをクリア
continue;
}
switch(resp){
case 1: // 足し算
if (!isEmpty()) {
x = pop() + pop();
push(x);
}
break;
case 2: // 引き算
if (!isEmpty()) {
a1 = pop(); a2 = pop();
x = a2 - a1;
push(x);
}
break;
case 3: // 掛け算
if (!isEmpty()) {
x = pop() * pop();
push(x);
}
break;
case 4: // 割り算
if (!isEmpty()) {
a1 = pop(); a2 = pop();
if (a1 != 0) {
x = a2 / a1;
push(x);
} else {
push(a2); // エラー時は元に戻す
push(a1);
}
}
break;
case 5: // 値の入力
if (scanf("%lf", &x
) != 1) { // 入力の確認 printf("入力エラー。再度入力してください。\n"); while (getchar() != '\n'); // バッファクリア continue;
}
push(x);
break;
case 9: // 結果表示して終了
answer();
return 0; // プログラム終了
default:
}
}
return 0;
}
void push(double value){
if( isFull() ){
}else{
stack[sp++] = value;
}
}
double pop(void){
if( isEmpty() ){
printf("スタックが空で取り出せませんでした\n"); return 0;
}else{
return stack[--sp];
}
}
int isFull(void){
return sp >= SIZE;
}
int isEmpty(void){
return sp <= 0;
}
void answer(void){
if (!isEmpty()) {
printf("answer: %.2lf\n", pop
()); // 小数点以下2桁まで表示 } else {
}
}
void rest(void){
sp = 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIFNJWkUgMTAKZG91YmxlIHN0YWNrW1NJWkVdOwppbnQgc3A7Cgp2b2lkIHB1c2goZG91YmxlIHZhbHVlKTsKZG91YmxlIHBvcCh2b2lkKTsKaW50IGlzRnVsbCh2b2lkKTsKaW50IGlzRW1wdHkodm9pZCk7CnZvaWQgYW5zd2VyKHZvaWQpOwp2b2lkIHJlc3Qodm9pZCk7CgppbnQgbWFpbih2b2lkKQp7CiAgcmVzdCgpOwoKICB3aGlsZSgxKXsKICAgIGludCByZXNwOwogICAgZG91YmxlIHgsIGExLCBhMjsKCiAgICAvLyDjgqrjg5rjg6zjg7zjgrfjg6fjg7Pjga7pgbjmip7jgpLkv4PjgZnjg6Hjg4Pjgrvjg7zjgrgKICAgIHByaW50Zigi5pON5L2c44KS6YG444KT44Gn44GP44Gg44GV44GEICgxOiArLCAyOiAtLCAzOiAqLCA0OiAvLCA1OiDlhaXlipssIDk6IOe1kOaenOihqOekuik6ICIpOwogICAgCiAgICAvLyBzY2FuZiDjga7miLvjgorlgKTjgpLnorroqo0KICAgIGlmIChzY2FuZigiJWQiLCAmcmVzcCkgIT0gMSkgewogICAgICBwcmludGYoIuWFpeWKm+OCqOODqeODvOOAguWGjeW6puWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhOOAglxuIik7CiAgICAgIC8vIOWFpeWKm+OBq+WkseaVl+OBl+OBn+WgtOWQiOOAgeODkOODg+ODleOCoeOCkuOCr+ODquOCogogICAgICB3aGlsZSAoZ2V0Y2hhcigpICE9ICdcbicpOwogICAgICBjb250aW51ZTsKICAgIH0KCiAgICBzd2l0Y2gocmVzcCl7CiAgICAgIGNhc2UgMTogIC8vIOi2s+OBl+eulwogICAgICAgIGlmICghaXNFbXB0eSgpKSB7CiAgICAgICAgICB4ID0gcG9wKCkgKyBwb3AoKTsKICAgICAgICAgIHB1c2goeCk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDI6ICAvLyDlvJXjgY3nrpcKICAgICAgICBpZiAoIWlzRW1wdHkoKSkgewogICAgICAgICAgYTEgPSBwb3AoKTsgYTIgPSBwb3AoKTsKICAgICAgICAgIHggPSBhMiAtIGExOwogICAgICAgICAgcHVzaCh4KTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMzogIC8vIOaOm+OBkeeulwogICAgICAgIGlmICghaXNFbXB0eSgpKSB7CiAgICAgICAgICB4ID0gcG9wKCkgKiBwb3AoKTsKICAgICAgICAgIHB1c2goeCk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDQ6ICAvLyDlibLjgornrpcKICAgICAgICBpZiAoIWlzRW1wdHkoKSkgewogICAgICAgICAgYTEgPSBwb3AoKTsgYTIgPSBwb3AoKTsKICAgICAgICAgIGlmIChhMSAhPSAwKSB7CiAgICAgICAgICAgIHggPSBhMiAvIGExOwogICAgICAgICAgICBwdXNoKHgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcHJpbnRmKCLjgrzjg63pmaTnrpfjgqjjg6njg7zjgafjgZnjgIJcbiIpOwogICAgICAgICAgICBwdXNoKGEyKTsgIC8vIOOCqOODqeODvOaZguOBr+WFg+OBq+aIu+OBmQogICAgICAgICAgICBwdXNoKGExKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNTogIC8vIOWApOOBruWFpeWKmwogICAgICAgIHByaW50Zigi5YCk44KS5YWl5Yqb44GX44Gm44GP44Gg44GV44GEOiAiKTsKICAgICAgICBpZiAoc2NhbmYoIiVsZiIsICZ4KSAhPSAxKSB7ICAvLyDlhaXlipvjga7norroqo0KICAgICAgICAgIHByaW50Zigi5YWl5Yqb44Ko44Op44O844CC5YaN5bqm5YWl5Yqb44GX44Gm44GP44Gg44GV44GE44CCXG4iKTsKICAgICAgICAgIHdoaWxlIChnZXRjaGFyKCkgIT0gJ1xuJyk7ICAvLyDjg5Djg4Pjg5XjgqHjgq/jg6rjgqIKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBwdXNoKHgpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDk6ICAvLyDntZDmnpzooajnpLrjgZfjgabntYLkuoYKICAgICAgICBhbnN3ZXIoKTsKICAgICAgICByZXR1cm4gMDsgIC8vIOODl+ODreOCsOODqeODoOe1guS6hgogICAgICBkZWZhdWx0OgogICAgICAgIHByaW50Zigi5LiN5q2j44Gq5pON5L2c44Gn44GZ44CCXG4iKTsKICAgIH0KICB9CgogIHJldHVybiAwOwp9Cgp2b2lkIHB1c2goZG91YmxlIHZhbHVlKXsKICBpZiggaXNGdWxsKCkgKXsKICAgIHByaW50Zigi44K544K/44OD44Kv44GM5rqA5p2v44Gn5YWl44KK44G+44Gb44KT44Gn44GX44GfXG4iKTsKICB9ZWxzZXsKICAgIHN0YWNrW3NwKytdID0gdmFsdWU7CiAgfQp9Cgpkb3VibGUgcG9wKHZvaWQpewogIGlmKCBpc0VtcHR5KCkgKXsKICAgIHByaW50Zigi44K544K/44OD44Kv44GM56m644Gn5Y+W44KK5Ye644Gb44G+44Gb44KT44Gn44GX44GfXG4iKTsKICAgIHJldHVybiAwOwogIH1lbHNlewogICAgcmV0dXJuIHN0YWNrWy0tc3BdOwogIH0KfQoKaW50IGlzRnVsbCh2b2lkKXsKICByZXR1cm4gc3AgPj0gU0laRTsKfQoKaW50IGlzRW1wdHkodm9pZCl7CiAgcmV0dXJuIHNwIDw9IDA7Cn0KCnZvaWQgYW5zd2VyKHZvaWQpewogIGlmICghaXNFbXB0eSgpKSB7CiAgICBwcmludGYoImFuc3dlcjogJS4ybGZcbiIsIHBvcCgpKTsgIC8vIOWwj+aVsOeCueS7peS4izLmoYHjgb7jgafooajnpLoKICB9IGVsc2UgewogICAgcHJpbnRmKCLjgrnjgr/jg4Pjgq/jgYznqbrjgafjgZnjgIJcbiIpOwogIH0KfQoKdm9pZCByZXN0KHZvaWQpewogIHNwID0gMDsKfQo=
操作を選んでください (1: +, 2: -, 3: *, 4: /, 5: 入力, 9: 結果表示): 値を入力してください: 操作を選んでください (1: +, 2: -, 3: *, 4: /, 5: 入力, 9: 結果表示): 値を入力してください: 操作を選んでください (1: +, 2: -, 3: *, 4: /, 5: 入力, 9: 結果表示): 操作を選んでください (1: +, 2: -, 3: *, 4: /, 5: 入力, 9: 結果表示): answer: 3.00