

このような状況でmain関数末尾のforループとその中のprintf文を取り出してdisplay関数にして、呼び出すのですが、どのようにコードを書いていいかわからないです。コード例が欲しいです。

[code]

    #include<stdio.h>
    #define SIZE 5
    int stack[SIZE];
    int sp;
    
    void push(int value);
    int pop(void);
    
    int main(void)
    {
    sp = 0;
    int resp, data;
    
    while(1){
    printf("1：push 2:pop 0:end : ");
    scanf("%d", &resp);
    
    if(!resp) break;
    
    switch(resp){
    case 1: printf("push : "); scanf("%d", &data);
    push( data );
    break;
    case 2: pop();
    break;
    }
    printf("sp=%d\n", sp);
    }
    printf("\n");
    for(int i=0; i<sp; i++){
    printf("stack[%d]=%d \n", i, stack[i]);
    }
    
    return 0;
    }
    
    void push(int value)
    {
    if(sp >= SIZE){
    printf("スタックが満杯で入りませんでした\n");
    }else{
    stack[sp++] = value;
    }
    }
    
    int pop(void)
    {
    if(sp <= 0){
    printf("スタックが空で取り出せませんでした\n");
    return 0;
    }else{
    return stack[--sp];
    }
    }
    
[/code]


CC BY-SA 4.0
2021-04-18T12:05:09.453
75362
2021-04-19T05:52:01.163
2021-04-18T12:16:42.320
3060
44879
question
c
display関数を用いて最後にスタックのデータを表示したい


コード例は @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()`関数を呼び出す処理を挿入する


CC BY-SA 4.0
2021-04-19T05:30:52.107
75373
2021-04-19T05:52:01.163
2021-04-19T05:52:01.163
26370
26370
75362
answer