重連結リストの表示について、関数化するときに引っかかってしまいます。 次のように構造体を定義し、表示を行うプログラムを作っています。 関数化せず直書きだと簡単に表示させることができるのですが、関数化するとheadの指定ができなくなるためどうやってx = headと最初に設定するととができるようになるでのしょうか、関数の部分はコメントあうとしている部分になります。 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct __tempcheck { char date[20]; int total; int total_die; int today; struct __tempcheck *prev; struct __tempcheck *next; } Tempcheck; //void PrintData(Tempcheck *x); int main(void) { FILE *fp = fopen("data.csv", "r"); Tempcheck *dummy = malloc(1 * sizeof(Tempcheck)); Tempcheck *head = dummy; Tempcheck *tail = dummy; dummy->prev = dummy->next = dummy; Tempcheck *x = malloc(1 * sizeof(Tempcheck)); x = malloc (1 * sizeof(Tempcheck)); while (fscanf( fp, "%s %d %d %d", x->date,&x->today, &x->total, &x->total_die) != EOF){ x->next = tail->next; x->prev = tail; tail->next->prev = x; tail->next = x; tail = tail->next; x = malloc (1 * sizeof(Tempcheck)); } /*---一覧表示スクリプト-----*/ printf("-----日付---------新規感染者数---累計感染者数-----累計死亡者数----¥n"); for(x = head->next; x != head; x=x->next){ printf("%s %11d %16d %14d¥n", x->date, x->today, x->total, x->total_die); } /*-----ここまで-----*/ fclose(fp); //ファイルを閉じる } /* void PrintData(Tempcheck *x){ printf("-----日付---------新規感染者数---累計感染者数-----累計死亡者数----¥n"); for(x = x->prev; x->today != 0; x=x->next){ printf("%s %11d %16d %14d¥n", x->date, x->today, x->total, x->total_die); } } */ ----------CSVファイルの内容は次のとおりです---------- 2022年05月15日 31001 8583048 30287 2022年05月14日 32401 8583048 30287 2022年05月13日 30001 8583048 30287 2022年05月12日 39301 8583048 30287 2022年05月11日 29001 8583048 30287
C言語関連