前提・実現したいこと
初心者です。C言語で住所録を作りたいです。
①入力した名前・住所・電話番号を配列に入れて、ファイルに書き込む機能と
②ファイルから読み込んで配列に入れて表示する機能を作りたいです。
①書き込む機能はなんとかできたのですが②読み込んで表示が上手くいきません。「全%d件の登録を読み込みます。」だけ表示されて終了してしまいます。
どこを直せばいいかご教授ください。
また、参考のお手本の中ではwrite関数のfprintfのdataの前に&がなかったのですが、入れないと①が②と同様に途中で止まってしまうため入れました。何か問題が起こりますでしょうか。ついでに教えていただけると幸いです。
長いですが、一応全文載せました。初歩的な問題で申し訳ありませんがよろしくお願いいたします。
発生している問題・エラーメッセージ
該当のソースコード
#include <stdio.h> int n; /*グローバル変数 */ /*プロトタイプ宣言 */ void write(void); void read(void); int main(void) { char data[3][30]; int bunki; printf("住所録です。名前と住所と電話番号を30件まで記録できます。\n"); printf("新規登録を行うには0、登録先を読み込むには1、指定された住所を含む登録先を読み込むには2を入力してください\n"); scanf("%d", &bunki); if(bunki == 0) { write(); } else { if(bunki == 1) { read(); } else { if(bunki == 2) { printf("作成中\n"); } else { printf("0,1,2以外が入力されています。やり直してください。\n"); } } } return 0; } /*新規登録を行う関数write */ void write(void) { char data[30][3]; FILE *fpn; /*ファイルポインタ mame=名前*/ FILE *fpa; /*ファイルポインタ address=住所*/ FILE *fpp; /*ファイルポインタ phone=電話番号 */ FILE *fpr; /*ファイルポインタ 登録が何番目かを記録するファイル*/ fpr = fopen("numberfile.txt", "r"); /*nの値をファイルから読み込む */ fscanf(fpr, "%d", &n); fclose(fpr); if(n >= 29) { printf("これ以上登録できません\n"); } else { if(n <= 28) { printf("%d番目の新規登録を行います。\n", n+1); /*n+1 0番目始まりは違和感があるので1~30番で表示されるようにした */ printf("名前を入力してください\n"); scanf("%s", &data[n][0]); /*[n][0]にはn番目の登録の、名前の情報が入る*/ fpn = fopen("namefile.txt","a"); fprintf(fpn, "%s\n", &data[n][0]); fclose(fpn); printf("住所を入力してください\n"); scanf("%s", &data[n][1]); /*[n][1]にはn番目の登録の、住所の情報が入る*/ fpa = fopen("addressfile.txt","a"); fprintf(fpa, "%s\n", &data[n][1]); fclose(fpa); printf("電話番号を入力してください\n"); scanf("%s", &data[n][2]); /*[n][2]にはn番目の登録の、電話番号の情報が入る*/ fpp = fopen("phonefile.txt","a"); fprintf(fpp, "%s\n", &data[n][2]); fclose(fpp); printf("%d番目の登録が完了しました。\n", n+1); n++; fpr = fopen("numberfile.txt", "w"); /*nの値を更新してファイルに保存 */ fprintf(fpr, "%d\n", n); fclose(fpr); } } } /*読み込みを行う関数read */ void read(void) { char data[30][3]; FILE *fpn; FILE *fpa; FILE *fpp; FILE *fpr; fpr = fopen("numberfile.txt", "r"); /*nの値をファイルから読み込む */ fscanf(fpr, "%d", &n); fclose(fpr); if(n == 0) { printf("一件も登録されていません。\n"); } else { fpn = fopen("namefile.txt","r"); fpa = fopen("addressfile.txt","r"); fpp = fopen("phonefile.txt","r"); int m; for(m=0; m<=n; m++) { fscanf(fpn, "%s", &data[m][0]); fscanf(fpa, "%s", &data[m][1]); fscanf(fpp, "%s", &data[m][2]); } fclose(fpn); fclose(fpa); fclose(fpp); printf("全%d件の登録を読み込みます\n", n); for(m=0; m<=n; m++) { printf("名前:%s 住所:%s 電話番号:%s\n", data[m][0], data[m][1], data[m][2]); } } }
試したこと
補足情報(FW/ツールのバージョンなど)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/06 10:40