これが私のコードです:
#include <stdio.h>
#include <stdlib.h>
#define STR_LEN 255
#define TRUE 1
typedef struct
{
int id;
char text[STR_LEN];
char answer[4][STR_LEN];
int correct_answer;
char date[STR_LEN];
char author[STR_LEN];
int difficulty;
} Question;
typedef struct
{
Question* new_question;
struct List* next;
} List;
List* listFromFile(List* root, FILE* file)
{
List* current_item;
Question* q;
root = (List* ) malloc(sizeof(List));
q = (Question* ) malloc(sizeof(Question));
if(!fread(q, sizeof(Question), 1, file))
{
printf("No data in the file");
exit(1);
}
root->new_question = q;
root->next = NULL;
do
{
current_item = (List* ) malloc(sizeof(List));
current_item->next = NULL;
if (!fread(q, sizeof(Question), 1 , file))
{
free(current_item);
break;
}
current_item->new_question = q;
current_item->next = root;
root = current_item;
}
while(TRUE);
free(q);
return root;
}
int main()
{
List* root = NULL;
List* item;
int count_id = 1;
int choice;
system("CLS");
FILE* file;
if ((file = fopen ("questions.bin", "rb")) != NULL)
{
root = listFromFile(root, file);
count_id = root->new_question->id;
printf("Questions loaded!\n\n\n\n");
if ((fclose(file)) != 0)
printf("ERROR - cannot close file!\n");
}
else printf("No questions found! Please add questions.\n\n\n");
問題は、リストを印刷しようとすると、各リスト要素に同じ情報があり、その理由がわからないことです。幸いなことに、リスト要素はファイルと同じ数ですが、情報をそれらに入れる方法に問題があります。それがなぜなのか誰にも分かりますか?