#include <stdio.h>

#define SIZE 5 // スタックの最大サイズ（必要に応じて変更してください）

double stack[SIZE]; // スタックの本体（実数型）
int sp = 0;         // スタックポインタ

// 関数のプロトタイプ宣言
void push(double value);
double pop(void);
int isFull(void);
int isEmpty(void);
void answer(void);
void reset(void);

int main(void) {
    int resp;
    double val;
    // cal1, cal2 は必要に応じてmain内で使用してください
    double cal1, cal2; 

    while (1) {
        printf("1:push 2:pop 3:show 9:exit \nメニューを選択してください: ");
        // scanfの戻り値警告に対応するため、戻り値をチェックするかキャストする
        if (scanf("%d", &resp) != 1) {
            break; 
        }

        if (resp == 9) {
            break; // 45行目付近の「case 9」エラー対策：正しくループを抜ける処理
        }

        switch (resp) {
            case 1:
                printf("プッシュする数値を入力: ");
                if (scanf("%lf", &val) == 1) {
                    push(val);
                }
                break;
            case 2:
                // 28〜29行目のエラー対策：正しくpopを呼び出して変数に代入
                if (!isEmpty()) {
                    cal1 = pop();
                    printf("ポップした値: %f\n", cal1);
                } else {
                    printf("スタックは空です。\n");
                }
                break;
            case 3:
                answer();
                break;
            default:
                printf("正しいメニューを選択してください。\n");
                break;
        }
    }
    return 0;
}

// --- スタック操作関数群 ---

// データを入れる
void push(double value) {
    if (isFull()) { // ❌ if(isFull(){ のタイポを修正
        printf("エラー: スタックが満杯です。\n");
        return;
    }
    stack[sp] = value;
    sp++;
}

// データを south (取り出す)
double pop(void) {
    if (isEmpty()) { // ❌ if(isEmpty)(){ のタイポを修正
        printf("エラー: スタックが空です。\n");
        return 0.0;  // ❌ 戻り値がない警告を修正（0.0を返す）
    }
    sp--;
    return stack[sp];
}

// スタックが満杯か確認する
int isFull(void) {
    if (sp >= SIZE) { // ❌ => を >= に修正
        return 1;
    }
    return 0;
}

// スタックが空か確認する
int isEmpty(void) {
    if (sp == 0) {
        return 1;
    }
    return 0;
}

// スタックの中身を表示する
void answer(void) {
    // ❌ forの更新式後ろの「;」を削除。printfの「%d」を「%f」に修正
    for (int i = 0; i < sp; i++) {
        printf("stack[%d] = %f \n", i, stack[i]);
    }
}

// スタックをリセットする
void reset(void) {
    sp = 0;
}
