これが、リストを作成する関数と一緒に私のコードの編集されたバージョンです。start はグローバル変数として初期化され、start=NULL です。fwriteも変えました。変数の長いリストを列挙するのではなく、buf を使用してその内容 (名前、タイトル、タイプなど) を取得しました。mygets は、後に続く \n を削除するために作成した単なる関数です。同じ問題が発生します。外国のシンボルが出てきます。
void saving()
{
FILE *out;
struct node buf;
struct node *current;
out = fopen("foo", "wb");
if(out == NULL) return;
printf("Writing to file...");
while(current != NULL)
{
fwrite(&buf, sizeof(struct node), 1, out);
}
printf("Done!\n");
fclose(out);
}
void create()
{
node *p,*q;
int item;
char ti[STRLEN],na[STRLEN],ty[6];
printf("Warrior name: ");
mygets(na);
printf("\nWarrior title: ");
mygets(ti);
printf("\nWarrior Type and Class Encoding: ");
fgets(ty,6,stdin);
p=(node *)malloc(sizeof(node));
strcpy(p->name,na);
strcpy(p->title,ti);
strcpy(p->type,ty);
p->next=NULL;
if(start==NULL)
{
start=p;
}
else
{
q=start;
while(q->next!=NULL)
{
q=q->next;
}
q->next=p;
}
}