構造体のスタック
Visual Studio 2012を使ってc言語のプログラミングの勉強をしているのですが、構造体をスタックする方法がわかりません。
数字と名前を入力してその両方を構造体にする。
その構造体をスタックできるようにしたいです。
c++
#include <stdio.h> #include <stdlib.h> /*--- スタックを実現する構造体 ---*/ typedef struct { int max; /* スタックの容量 */ int ptr; /* スタックポインタ */ Member *stk; /* スタック本体(の先頭要素へのポインタ) */ } IntStack; typedef struct { int no; char name[20]; } Member; /*--- スタックの初期化 ---*/ int Initialize(IntStack*, int); /*--- スタックにデータをプッシュ ---*/ int Push(IntStack *s, Member x); /*--- スタックからデータをポップ ---*/ int Pop(IntStack *s, Member *x); /*--- スタックの後始末 ---*/ void Terminate(IntStack*); int main(void) { IntStack s; if (Initialize(&s, 64) == -1) { puts("スタックの生成に失敗しました。"); return 1; } char name[20]; while (1) { int menu, x; printf("(1)プッシュ (2)ポップ (0) 終了:"); scanf("%d", &menu); if (menu == 0) break; switch (menu) { case 1: /*--- プッシュ ---*/ printf("番号:"); scanf_s("%d", &x); printf("氏名:"); scanf_s("%d", &s); if (Push(&s, x) == -1) puts("\aエラ-:プッシュ失敗"); break; case 2: /*--- ポップ ---*/ if (Pop(&s, &x) == -1) puts("\aエラ-:ポップ失敗"); else printf("ポップしたデータは%dです。\n", x); break; } } Terminate(&s); return 0; } /*--- スタックの初期化 ---*/ int Initialize(IntStack *s, int max){ s->ptr = 0; if ((s->stk =(int*) calloc(max, sizeof(int))) == NULL) { s->max = 0; /* 配列の生成に失敗 */ return -1; } s->max = max; return 0; } /*--- スタックにデータをプッシュ ---*/ int Push(IntStack *s, int x) { if (s->ptr >= s->max)/* スタックは満杯 */return -1; s->stk[s->ptr++] = x; return 0; } /*--- スタックからデータをポップ ---*/ int Pop(IntStack *s, int *x) { if (s->ptr <= 0)/* スタックは空 */return -1; *x = s->stk[--s->ptr]; return 0; } /*--- スタックの後始末 ---*/ void Terminate(IntStack *s) { if (s->stk != NULL) free(s->stk); /* 配列を破棄 */ s->max = s->ptr = 0; }
補足情報(FW/ツールのバージョンなど)
OS windows10
環境 visual studio 2012
ざっと見てみたのですが、Visual Studio でビルド(コンパイル)すると、エラーとか警告とか一杯出ませんか? まず、それを読むことから、お薦めします。