以下のようなデータテキストを
10 香川真司 FW_1989/03/17 17 長谷部誠 MF_1984/01/18 5 長友佑都 DF_1986/09/12 13 大久保嘉人 FW_1982/06/09 7 遠藤保仁 MF_1980/01/28 9 岡崎慎司 FW_1986/04/16 1 川島永嗣 GK_1983/03/20 4 本田圭佑 MF_1986/06/13 2 内田篤人 DF_1988/03/27 15 今野泰幸 DF_1983/01/25 22 吉田麻也 DF_1988/08/24
構造体に読み取り、標準画面出力しようと考えて下記のようなコードを書きました。(ただし、練習のため線形リストを使うようにしています)
C
1#include <stdio.h> 2#include <string.h> 3#include <stdlib.h> 4 5/* 構造体の定義 */ 6struct member{ 7 int num; /* 登録番号 */ 8 char name[13]; /* 氏名 */ 9 char profile[45]; /* プロフィール */ 10 struct member *next; 11}; 12 13typedef struct member list_mbr; 14 15list_mbr *list(FILE *fp); 16void printlist(list_mbr *p); 17 18int main(int argc,char* argv[]){ 19 FILE *fp; 20 list_mbr *listptr; 21 22 if ((fp = fopen("test.txt", "r"))==NULL) { 23 fprintf(stderr,"ファイルを開くのに失敗しました\n"); 24 exit(1); 25 } 26 listptr = list(fp); 27 printlist(listptr); 28 fclose(fp); 29 return 0; 30} 31 32 33 34/* list()関数:ファイルポインタを引数とし、ファイルから */ 35/* データを読み込みリストを作成する。 */ 36/* 戻り値は、作成されたリストの先頭データのアドレス */ 37list_mbr *list(FILE *fp){ 38 int d; 39 list_mbr *p,*newp; 40 41 p=NULL; 42 while(fscanf(fp,"%d %s %s\n",&p->num,p->name,p->profile) != EOF){ 43 newp->next = p; 44 p = newp; 45 } 46 return p; 47} 48 49 50/* printlist()関数:リストの先頭データのアドレスを引数 */ 51/* とし、リストの内容を出力する */ 52void printlist(list_mbr *p){ 53 while (p != NULL) { 54 printf("%d %s %s ", p->num,p->name,p->profile); 55 p = p->next; 56 } 57 printf("\n"); 58}
このコードを実行しようとしたものの、うまくいかず(実行時に「セグメンテーション違反です (コアダンプ)」とエラーが出て強制終了します。おそらくlist()関数内部のデータの読み取り部分で上手く読み取れていないと思われます)困っています。どのように直せばいいでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/13 05:31
2017/07/13 05:35
2017/07/13 05:50 編集