入力例~
人数:3
学籍番号:123
名前:佐藤
学籍番号:456
名前:田中
学籍番号:789
名前:前田
出力例~
学籍番号:789
名前:前田
学籍番号:456
名前:田中
学籍番号:123
名前:佐藤
というような新しく入力されたデータ順に出力するプログラムを作りたいのですが、下のプログラムを実行すると
学籍番号:789
名前:前田
学籍番号:789
名前:前田
学籍番号:789
名前:前田
と出力されてしまいます。最初に述べたように出力できるようどこが間違えていてどうしたら希望通り出力できるのか教えてください。
ソースコード~
#include<stdio.h>
#include<stdlib.h>
#define STACKSIZE 100
typedef struct personaldata {
char *stnum, *name;
}PD;
PD data[STACKSIZE];
int sp = -1;
int push(char *a, char *b)
{
if (sp >= STACKSIZE - 1)
return -1;
sp++; data[sp].stnum = a; data[sp].name = b; return 0;
}
int pop(char *a, char *b) {
if (sp < 0)
return -1;
printf("\n%d\n", sp); a = data[sp].stnum; b = data[sp].name; sp--; printf("学籍番号:%s\n名前:%s\n", a, b); return 0;
}
int main(void) {
int i, n; char a[STACKSIZE], b[STACKSIZE]; PD *data; printf("人数:"); scanf("%d", &n); data = (PD *)calloc(n, sizeof(PD *)); for (i = 0; i < n; i++) { printf("学籍番号:"); scanf("%s", a); printf("名前:"); scanf("%s", b); push(a, b); } for (i = 0; i < n; i++) pop(a, b); return 0;
}
回答2件
あなたの回答
tips
プレビュー