リスト構造体ポインタにcsvファイルを読み込みたい
[1.2] 詳細
かなり省略しましたがリスト構造体にユーザーが値を入力したものを表示させるプログラムです。
読み込みたいcsvファイルは以下の通りです。
これをfscanfで構造体ポインタに読み込もうとすると、うまく読み込んでくれません。原因もわからず、わかる方いましたら、回答いただけると幸いです。
以下コードです。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define NAME_LEM_MAX 10
#define ADDRESS_LEM_MAX 64
#define BIRTH_LEM_MAX 10
#define NUMBER_LEM_MAX 16
#define NO_PROBLEM 0
#define ERROR 1
typedef struct student
{
char id;
char name[NAME_LEM_MAX + 1];
char address[ADDRESS_LEM_MAX + 1];
char birth[BIRTH_LEM_MAX + 1];
char phone_number[NUMBER_LEM_MAX + 1];
struct student *next; // 次のデータがある場所
} PERSON_t;
static PERSON_t *head = NULL; // リストの先頭 ノードが存在するアドレス
static PERSON_t *tail = NULL; // リストの末尾
int add_person(int id);
int delete_person(void);
int change_person(void);
int save_person(void);
int read_person(void);
void person_result(void);
void get_string(char *str, unsigned int num);
int get_person_id(PERSON_t *p);
int get_person_name(PERSON_t *p);
int get_person_address(PERSON_t *p);
int get_person_birth(PERSON_t *p);
int get_person_phone_number(PERSON_t *p);
int main(void)
{
int number = 0;
int id = 0;
int ret;
int end_flag = 0;
enum select;
PERSON_t *current, *data;
FILE *fp;
while(end_flag == 0)
{
printf("---------------------------------------------\n");
printf("1.一覧\n2.一件表示\n3.追加入力\n4.変更\n5.削除\n11.保存\n12.読み込み\n0.終了\n ");
scanf("%d",&number);
fflush(stdin);
switch(number){
case 1:
person_result();
break;
case 2:
person_result();
break;
case 3:
id++;
ret = add_person(id);
if(ret == NO_PROBLEM){
puts("追加完了");
}
break;
case 4:
ret = change_person();
if(ret == NO_PROBLEM){
puts("変更完了");
}
break;
case 5:
ret = delete_person();
if(ret == NO_PROBLEM){
puts("削除完了");
}
break;
case 11:
puts("保存");
puts("-------------\n");
ret = save_person();
if(ret == NO_PROBLEM){
puts("保存完了");
}
break;
case 12:
puts("読み込み");
puts("-------------\n");
ret = read_person();
if(ret == NO_PROBLEM){
puts("読み込み完了");
}
break;
case 0:
puts("終");
end_flag = 1;
break;
default:
//何もしない
break;
}
}
return 0;
}
int read_person(void)
{
int ret = NO_PROBLEM;
PERSON_t *data;
FILE *fp; //file型構造体
free(data);
fp = fopen("test.txt", "r"); //読み込みモードファイルをで開く
if( fp == NULL ){
perror("失敗\n");
return ERROR;
}else{
puts("成功\n");
}
data = (PERSON_t *)malloc(sizeof(PERSON_t));
fscanf(fp, "%d%s%s%s%s", &data->id, data->name, data->address, data->birth, data->phone_number) ;
printf(" %d\n %s\n %s\n %s\n %s\n",&data->id, data->name, data->address, data->birth, data->phone_number);
return ret;
}
[2] 環境
[2.1] OS : Windows,
[2.2] コンパイラ名 : Cpad