Initialize2で追加しようと思ったのですが、どうにもprintfで正しく表示してくれません。正しく表示させる方法と正しく表示されない理由を教えていただけるとありがたいです。C言語の能力は低いです。よろしくお願いします。
#include <stdio.h>
#include <string.h>
#include <limits.h>
#define mozisuu 80
typedef struct{
char *hyouzi;
}KOU;
typedef struct {
int max;
int yousosuu;
int sakuzyo;
int tuika;
KOU *que;
}KYU;
int Initialize(KYU *s, int max)
{
s->yousosuu = s->sakuzyo = s->tuika = 0;
if ((s->que = (KOU *)calloc(max, sizeof(KOU))) == NULL) {
s->max = 0;
return -1;
}
s->max = max;
return 0;
}
int Initialize2(KYU *q, int max){
int t;
q->max = q->max+max;
t=q->max;
if ((q->que = (KOU *)realloc(q->que, sizeof(KOU)*t)) == NULL) {
q->max=q->max-max;
return -1;
}
return 0;
}
int Enkyu(KYU *s, KOU x){
if (s->yousosuu >= s->max) {
return -1;
}
s->yousosuu++;
s->que[s->tuika] = x;
if ((s->que[s->tuika].hyouzi =(char *)calloc(strlen(x.hyouzi)+1, sizeof(char))) == NULL)
return -1;
strcpy(s->que[s->tuika].hyouzi, x.hyouzi);
s->tuika++;
if(s->tuika==s->max)
s->tuika=0;
return 0;
}
int Capa(const KYU *s){
return s->max;
}
int Size(const KYU *s){
return s->yousosuu;
}
void hyouzi(const KOU *x){
int i;
printf("%-18.18s\n", x->hyouzi);
}
void Print(const KYU *s){
int i;
for(i = 0; i < s->yousosuu; i++)
hyouzi(s->que+(i+s->sakuzyo)%s->max);
putchar('\n');
}
int main(void){
KYU s;
int max;
KOU x;
if (Initialize(&s, 1)==-1){
puts("キューの生成に失敗した。");
return 1;
}
if ((x.hyouzi = (char *)calloc(mozisuu+1, sizeof(char))) == NULL){
return 1;
}
while(1) {
int menu, pos;
printf("現在のデータ数:%d/%d\n",Size(&s), Capa(&s));
printf("(1)エンキュー (2)表\示 (0)終了:");
scanf("%d", &menu);
if (menu == 0) break;
switch (menu) {
case 1:
printf("input "); scanf("%s", x.hyouzi);
if (Enkyu(&s, x) == -1){
Initialize2(&s, 3);
Enkyu(&s, x);
}
break;
case 2:
Print(&s);
break;
}
}
return 0;
}