#include <stdio.h> #define MAX 10 /*--- int 型スタックを実現する構造体 ---*/ /*--- 身体データ型 ---*/ typedef struct{ int height; /* 身長 */ double vision; /* 視力 */ } Body ; /*--- 身体検査データ型 ---*/ typedef struct{ Body body; /* 身体データ型 ---*/ int ptr;/* スタックポインタ */ int max; int stk[MAX]; char name[20]; /* 氏名 20人分の箱*/ } PhysCheckStack ; /*--- スタックの初期化 ---*/ int Initialize(PhysCheckStack *s, int max){ s->ptr = 0; s->max = max; //s->max = ( sizeof s->name / sizeof s->name[0]); return 0; } /*--- スタックにデータをプッシュ ---*/ int Push(PhysCheckStack *s, char x[]){ if (s->ptr >= s->max) return -1; /* スタック満杯 */ for(int i = 0 ; x[i] != NULL ; i ++){ s->name[s->ptr] = x[i]; 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 ; } /*--- スタックの全データの表示 ---*/ void Print(const PhysCheckStack *s){ for(int i = 0; s->name[i] != NULL; i++) { printf("%s", s->name[i]); } putchar('\n'); } int main(void){ PhysCheckStack s; Initialize(&s, MAX); while (1) { int menu; char y[20]; 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 エラー:ポップに失敗しました。"); // 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; }
開発途中段階です
1.プッシュで入力をabcとしたとき、現在のデータ数は1/10としたい
2.Print(&s);を呼び出したとき、abcと表示させたい
この解決プロセスについてアドバイスをよろしくお願いします。
回答2件
あなたの回答
tips
プレビュー