動作しました。私はばかで、=
代わり==
に 1 か所に書きました tt ありがとうございました。
私は自分のデータを含むファイルを持っているので、それを読んでリストに入れたいと思っています。私はそれを行う方法を完全には知りません。私はこのプロジェクトを近い将来に終わらせなければならないので、あなたに助けを求めます;]
ヘッダファイル:
typedef struct
{
char category[50];
char name[50];
char ingredients[50];
char instruction[1000];
}recipe_t;
typedef struct element
{
struct element *next;
recipe_t recipe;
} el_list;
void all_recipe_list();
void show_all_list(el_list *list);
void add_new_element_to_list(el_list *list, recipe_t formula);
私のリスト関数ファイル:
void all_recipe_list() //reading all record into list + show it(show_all_list function)
{
FILE *database;
recipe_t formula;
el_list *head;
head = NULL;
database = fopen(filename, "rb");
fgetc(database); // function feof returns value only if we read something before, so in order to check if its end, we try to read one char
// when writing data to file, I put \n always before new record
while (!feof(database))
{
fread(&formula, sizeof(recipe_t),1,database);
if (head == NULL)
{
head = malloc(sizeof(el_list));
head->recipe = formula;
head->next = NULL;
}
else
{
add_new_element_to_list(head,formula);
}
fgetc(database); // same as above
}
fclose(database);
show_all_list(head);
}
void show_all_list(el_list *list)
{
el_list *p=list;
while (p != NULL)
{
printf("Kategoria:%s\n", p->recipe.category);
printf("Nazwa:%s\n", p->recipe.name);
printf("Skaldniki:%s\n", p->recipe.ingredients);
printf("Instrukcja:%s\n", p->recipe.instruction);
p = p->next;
}
}
void add_new_element_to_list(el_list *list, recipe_t formula)
{
el_list *p, *new_el;
p = list;
while (p->next != NULL)
{
p = p->next;
}
new_el = malloc(sizeof(el_list));
new_el->recipe = formula;
new_el->next = NULL;
p->next= new_el;
}
問題は何ですか?プログラムは正常にコンパイルされていますが、all_recipe_list が呼び出されるとクラッシュします。add_new_element_to_list に問題がある可能性があります。しかし、何を理解することはできません。また、show_all_list p->recipe.category が正しい方法であるかどうかもわかりません。