C言語の構造体の質問です。 コマンドラインで名前(B-sanなど)を入力し、テキストファイルからその名前に対応する住所と電話番号を出力するという問題です。非常に困っているのでよろしくお願いします。

C言語の構造体の質問です。 コマンドラインで名前(B-sanなど)を入力し、テキストファイルからその名前に対応する住所と電話番号を出力するという問題です。非常に困っているのでよろしくお願いします。 #include<stdio.h> #include<string.h> #include<stdlib.h> #define N 3 typedef struct { char name[20]; /* 名前 */ char address[20]; /* 住所 */ double phone; /* 電話番号 */ } personal_t; void abc(personal_t *pd_p, int n); personal_t *search(personal_t *pd_p, int n, char *argv[]); int main(int argc, char *argv[]) { /*** アドレス帳の構造体配列の定義、初期化とポインタ変数の定義 ***/ personal_t pd[N], *pd_p; /* 構造体配列 pd の先頭アドレスをポインタ変数に代入 */ abc(pd,N); pd_p = search(pd,N,argv); /*** 各メンバ値の表示 ***/ if(pd_p!=NULL) { printf ("名前: %s\n", pd_p->name); /* 名前を表示 */ printf ("住所: %s\n", pd_p->address); /* 住所を表示 */ printf ("電話番号: %.0f\n", pd_p->phone); /* 電話番号を表示 */ } } void abc(personal_t *pd_p, int n) { FILE *fp; int i; char name[20]; char address[20]; double phone; if((fp=fopen("test123.txt","r"))==NULL) { printf("ファイルをオープンできません\n"); exit(1); } for(i=0;i<n; i++){ fscanf(fp,"%s %s %.0f",name,address,phone); strcpy(pd_p->name,name); strcpy(pd_p->address,address); pd_p->phone=phone; pd_p++; } fclose(fp); } /*** アドレス帳を検索する関数 ***/ personal_t *search(personal_t *pd_p, int n, char *argv[]) { int i; for(i=0; i<n; i++){ if(strcmp(pd_p->name,argv[1])==0) { /* 検索したい文字列と一致するか */ return pd_p; /* 見つかったら構造体配列の要素の先頭アドレスを返す */ } pd_p++; /* 次の構造体配列の要素を指しなおす */ } } test123.txt には ------------------- A-san A-city 123456 B-san B-city 456789 C-san C-city 789123 ------------------- が入っています。

C言語関連966閲覧xmlns="http://www.w3.org/2000/svg">50

ベストアンサー

0

電話番号をdoubleにする必要があるのですか? 修正箇所1: double phone; /* 電話番号 */ ↓ char phone[ 20 ]; 修正箇所2: printf ("電話番号: %.0f\n", pd_p->phone); /* 電話番号を表示 */ ↓ printf("電話番号: %s\n", pd_p->phone); 修正箇所3: double phone; ↓ char phone[ 20 ]; 修正箇所4: fscanf(fp,"%s %s %.0f",name,address,phone); ↓ fscanf(fp,"%s %s %s",name,address,phone); 修正箇所5: pd_p->phone=phone; ↓ strcpy(pd_p->phone,phone);

ThanksImg質問者からのお礼コメント

どうもありがとうございました。 無事できました。

お礼日時:2011/1/26 20:07

その他の回答(1件)

0

何に対して、どのように困っているのか、 各関数の仕様はどのようになっているのか、 を書くこと。