#include <stdio.h> #define MAX 10 /*--- int 型スタックを実現する構造体 ---*/ typedef struct { int max; /* スタックの容量 */ int ptr; /* スタックポインタ */ int stk[MAX]; /* スタック本体*/ } PhysCheckStack; typedef struct{ double vision; /* 視力 */ int height; /* 身長 */ } Body ; /*--- 身体検査データ型 ---*/ typedef struct{ Body body; /* 身体データ型 ---*/ char name[20]; /* 氏名 */ } PhysCheck ; /*--- スタックの初期化 ---*/ int Initialize(PhysCheckStack *s, int max){ s->ptr = 0; s->max = max; return 0; } /*--- スタックにデータをプッシュ ---*/ int Push(PhysCheckStack *s, char x){ if (s->ptr >= s->max) return -1; /* スタック満杯 */ s->stk[s->ptr] = x; s->ptr++; return 0; } // /*--- スタックからデータをポップ ---*/ // int Pop(PhysCheckStack *s, int *x){ // if (s->ptr <= 0) return -1; /* スタックは空 */ // s->ptr--; // *x = s->stk[s->ptr]; // return (0); // } // /*--- スタックからデータをピーク ---*/ // int Peek(PhysCheckStack *s, int *x){ // if (s->ptr <= 0) return -1; // *x = s->stk[s->ptr - 1]; // return 0; // } /*--- スタックの容量 ---*/ int Capacity(const PhysCheckStack *s){ return s->max; } // /*--- スタックに積まれているデータ数 ---*/ int Size(const PhysCheckStack *s){ return s->ptr; } /*--- スタックの全データの表示 ---*/ void Print(const PhysCheckStack *s){ int i; for(i = 0; i < s->ptr; i++) printf("'%s' ", s->stk[i]); putchar('\n'); } int main(void){ PhysCheckStack s; Initialize(&s, MAX); while (1) { int menu; char y, x; printf("現在のデータ数:%d/%d\n",Size(&s), Capacity(&s)); printf("(1) プッシュ (2) ポップ (3) ピーク (4) 表示 (0) 終了:"); scanf("%d", &menu); if (menu == 0) break; switch (menu) { case 1: /* プッシュ */ printf("データ:"); scanf("%s", &y); if (Push(&s, y) == -1) puts("\a エラー:プッシュに失敗しました。"); break; // case 2: /* ポップ */ // if (Pop(&s, &x) == -1) // puts("\a エラー:ポップに失敗しました。"); // else // printf("ポップしたデータは%d です。\n", x); // break; // case 3: /* ピーク */ // if (Peek(&s, &x) == -1) // puts("\a エラー:ピークに失敗しました。"); // else // printf("ピークしたデータは%d です。\n", x); // break; case 4: /* 表示 */ Print(&s); break; } } return 0; }
デバッグを行ったところ、 Initialize(&s, MAX);でreturn 0を返した後、printf("現在のデータ数:%d/%d\n",Size(&s), Capacity(&s));を表示するときに、stk = {4196445, 0, -5136, 32767, 0, 0, 4196368, 0, 4195648, 0}という値が代入されています。
なぜこのような値が代入されたのか知りたいです。
よろしくお願いします
このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
回答2件
あなたの回答
tips
プレビュー