質問: value; } } int pop(void) { if(sp <= 0){ printf("スタックが空で取り出せませんでした\n"); return 0; }else{ return stack[--sp]; } } ```
回答: コード例は @metropolis さんの紹介先を見てもらうとして、考える切っ掛けをどのようにすれば良いかを示します。 * 呼び出して処理した後の結果を必要とするか? → 不要 → 戻り値を`void`とする * 使用する変数や値は何か? + スタックをあらわす整数の配列 → `stack[]` + 上記の中で先頭からの有効データ数 → `sp` + ループ処理用のカウンタ → `i` * パラメータとして指定する変数や値は何か?(選択肢として考え方次第:どちらでも良い) + 無し → パラメータは`void`:必要な変数`stack[]`と`sp`はグローバルに定義されている & 他の`push()`/`pop()`関数でもそれらは指定していない + `int []`(stack[])と`int`(sp)をパラメータとして指定 → 拡張性・汎用性を考慮して処理対象をパラメータで指定できるようにする * スタック内容の初回の表示開始位置をどうするか?(選択肢として考え方次第:どちらでも良い) + 必ず行の先頭から表示されるように、`display()`関数の中で初回の表示開始位置を調節する → `printf("\n");`を`display()`関数の`for`ループの前に入れる + `display()`関数はスタック内容表示に特化し、初回の表示開始位置調整は呼び出す側に任せる → `display()`関数は`for`ループだけにする * `main()`関数の中で呼び出す自作の関数は、その前の`void push(int value);`と`int pop(void);`のようにあらかじめプロトタイプ宣言しておく * 上記内容に合わせて`display()`関数を作成し、スタック内容表示処理を移動させる * 元々のスタック内容表示処理の位置に`display()`関数を呼び出す処理を挿入する