- 締切済み
C言語の構造体で悩んでます。
構造体で顧客情報を管理する課題に取り組んでいるんですが、言語は苦手な分野で解決しかねてます。みなさんの力を借りたいです。お願いします。 課題は、構造体で顧客情報を確保(顧客情報入力の前に、キーボードで1~50の顧客情報の数を入力し、その数の構造体を確保)し、その後、顧客情報を登録するというものです。 私が記述したのは下記のとおりです。 間違いだらけだと思います。すみません。 #define size_id (5) #define size_name (25) #define size_huri (25) #define size_tel (17) struct kokyaku { long *id; char *name; char *huri; char *tel; }; int main() { int a , i; // 構造体確保の数、構造体参照時使用 long c = 1; // id struct kokyaku *ko; printf("顧客情報がありません。何件分確保しますか?(1 - 50)"); scanf("%d",&a); ko = (struct kokyaku *)malloc( sizeof(struct kokyaku) * (a)); if(a >= 1 || a <= 50) { for(i = 0;i < a;i++){ ko[i].id = (long*)malloc(size_id); ko[i].name = (char*)malloc(size_name); ko[i].huri = (char*)malloc(size_huri); ko[i].tel = (char*)malloc(size_tel); } }else{ printf("<<入力範囲にありません>>\n"); printf("<<処理を中断します>>\n"); return 0; } while(c <= a) { i = 0; printf("***** 顧客登録画面 *****\n"); ko[i].id = &c; printf("氏名 :"); scanf("%s", ko[i].name); printf("ふりがな:"); scanf("%s", ko[i].huri); printf("電話番号:"); scanf("%s", ko[i].tel); c++; i++; } } エラーとか特にないのですが、構造体を件数分確保できていないと思います。 この後にも削除やファイル出力といった展開をさせなければならないのですが、後はなんとか自力でがんばろうと思います。 乱文ですみません。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
お礼
回答ありがとうございます。お礼遅くなってすみません。 while内のミスを直したら構造体のそれぞれに情報を入れれるようになりました。 cをiではなく、また1からはじめている理由は、理由にはならないんですが、idは0からでなく1からはじまるからです。入れるときにi + 1でいれてもいいかなとは思ったんですが、なんとなくつくってみたって感じです^^; *(ko[i].id) = c;と記述したらlong*とlongで異なっていますと出たのですが、どぉすればいいのでしょうか。。質問ばかりで恐縮です。。 for文を使っていないのは、この質問をするにあたってはwhileでもforでもよかったんですが、課題ではまだ続きがあって続けるためにはforよりwhileのほうが適切かなと思いwhileで記述しました。説明不足ですみません。。 ちなみに続きでは顧客情報確保後、分岐点(登録、一覧表示、削除、ファイル出力、終了)に行き、登録に行っても一件入力後分岐点に戻ってきます。だからforではなくwhile(他にも良い方法はあると思いますが…)を選びました。 長文、乱文申し訳ないです。