なぜ無限ループになるかが分かりません。
こんにちは。
関数内でCSVファイルからデータを読み取り、そのデータをリストに入れて、先頭を指すポインタをmain内に返すと言う作業をさせたくて書いたソースです。なぜ無限ループするのか分かりません。
どなたか教えていただけませんか?
以下ソース
#include <stdio.h>
#include <stdlib.h>
struct account{
int ID;
char Sname[50];
char Fname[50];
char Adress[100];
int Sex;
int Age;
char Group[100];
struct account *next;
};
struct account *Rfile(char *FileName,struct account *top);
int main(void)
{
char FileName[FILENAME_MAX];
struct account *top,*q;
top = NULL;
printf("読み込むファイルの名前を入力してください>>>");
scanf("%s",FileName);
q = Rfile(FileName,top);
return 0;
}
struct account *Rfile(char *FileName,struct account *top)
{
FILE *fp;
char filename[FILENAME_MAX];
int ret;
struct account *new;
new = (struct account *) malloc(sizeof(struct account));
new->next = NULL;
strcpy(filename,FileName);
if( (fp = fopen( filename,"r")) == NULL)
{
printf("ファイルが見つかりません。>>>%s\n",filename);
//exit(EXIT_FILURE);
}
while( (ret = fscanf( fp, "%d,%[^,],%[^,],%[^,],%d,%d,%[^,]", &(new->ID), new->Sname, new->Fname, new->Adress, &(new->Sex), &(new->Age), new->Group ) ) != EOF )//ファイルの最後でないなら
{
printf("%d,%s,%s,%s,%d,%d,%s",new->ID,new->Sname,new->Fname,new->Adress,new->Sex,new->Age,new->Group);
if(top != NULL){
while(top->next != NULL){
top = top->next;
}
top = new;
}
else{//top == NULL
top = new;
}
new = NULL;
new = (struct account *) malloc(sizeof(struct account));
new->next = NULL;
}
fclose(fp);
return top;
}