ページ 1 / 1
ファイルデータの更新処理
Posted: 2012年6月30日(土) 17:26
by taz
こんにちは。
ファイルデータの更新処理を作成したいのです。
今出来ているコードは以下のとおりです。
コード:
/* データ変更処理 */
#include <stdio.h>
#include <stdlib.h>
FILE *fp;
char *fname = "comma.csv";
main()
{
int no;
int ret;
printf("---会員管理システムメニュー---\n\n");
printf("1.新規登録\n");
printf("2.変更\n");
printf("3.削除\n");
printf("4.一覧表示\n");
printf("No? ");
ret=scanf("%d",&no);
if(no == 1)
{
ret = add_record();
}
else if(no == 2)
{
ret = update_record();
}
}
int update_record()
{
int no;
char name[100];
char adress[100];
char tel[100];
char mail[100];
int choice;
int ret;
printf("\n会員番号(0-10数値)? ");
scanf("%d",&no);
fp = fopen(fname,"r");
if(fp == NULL)
{
printf("%sファイルが開けません\n",fname);
return -1;
}
while((ret = fscanf(fp,"%[^,],%s,%s,%s,%s",no,&name,&adress,&tel,&mail)) != EOF)
{
}
fclose(fp);
return 0;
printf("会員名称(漢字,英語)? name");
scanf("%s",&name);
printf("住所(漢字,数字50文字)? adress");
scanf("%s",&adress);
printf("電話番号(半角文字-で区切る)? tel");
scanf("%s",&tel);
printf("メールアドレス(半角英数字)? mail");
scanf("%s",&mail);
printf("新規登録しますか?(1:yes 2:no)? ");
scanf("%d",&choice);
if(choice == 2)
{
system("cls");
main();
}
}
キーボードで入力された会員番号に対して、その会員番号に該当する会員情報をテキストデータから、
抽出し、表示させて、それを変更したいのですが、上のコードのとおり、抽出の部分がうまくいっていません。
どなたかアドバイスよろしくお願いします。
Re: ファイルデータの更新処理
Posted: 2012年6月30日(土) 17:40
by box
taz さんが書きました:
抽出の部分がうまくいっていません。
抽出の部分、というのは、
taz さんが書きました:
コード:
while((ret = fscanf(fp,"%[^,],%s,%s,%s,%s",no,&name,&adress,&tel,&mail)) != EOF)
{
}
ここのことですか?だとすると、
noに&が付いていなくて、他の変数には&が付いているのは、なぜでしょうか。
また、while文によるループの中で何も処理を行なっていませんが、これは作成途中だから、
ということでよいのでしょうか。
Re: ファイルデータの更新処理
Posted: 2012年6月30日(土) 18:02
by taz
whileの部分もif文か何かにしなくてはいけないと思っているのですが、
どう書けばよいかわかりません。
キーボード入力
↓
入力値とファイル中のデータの値を比較
↓
一致したデータを出力する
というような形にしたいのです。
Re: ファイルデータの更新処理
Posted: 2012年6月30日(土) 18:23
by box
会員番号、名前、住所、電話番号、メールアドレスといった情報は、
各会員の属性情報だと思われますので、構造体か何かを使って一元的に管理するのが
よくある方法だと思います。
そして、会員全体の情報は構造体の配列か何かを使って管理する、と。
現在のupdate_record関数では、1人分の情報しか読めないようになっているように見えます。
データ構造をどう定義すべきかをよく考えてから、コードに落とすほうがいいような気がします。
Re: ファイルデータの更新処理
Posted: 2012年6月30日(土) 18:39
by taz
あとあとで、構造体を使用した形に改造していきたいと思っております。
現段階では、構造体は使わないで、機能の実現をしたいと思います。
1人の情報が読めるようになればいいと思うので、コードの書き方を教えてください。
キーボード入力
↓
ファイル内の会員番号と比較
↓
一致したデータを編集時の初期値として表示する
↓
そのデータを書き換える
↓
ファイルに保存しなおす
Re: ファイルデータの更新処理
Posted: 2012年6月30日(土) 19:45
by box
add_record関数の中身は、トピック「出力される値がおかしい」の分を修正済だとして、
同関数とupdate_record関数の両方に、同じ配列定義が登場していないでしょうか。
今後、他の機能のための関数を用意するとき、また同じ配列定義をその関数の中に書くのでしょうか。
どういう風にされる予定ですか?
Re: ファイルデータの更新処理
Posted: 2012年6月30日(土) 19:54
by taz
同じように書くと思います。
Re: ファイルデータの更新処理
Posted: 2012年6月30日(土) 22:12
by へにっくす
taz さんが書きました:あとあとで、構造体を使用した形に改造していきたいと思っております。
現段階では、構造体は使わないで、機能の実現をしたいと思います。
1人の情報が読めるようになればいいと思うので、コードの書き方を教えてください。
boxさんが指摘した、
box さんが書きました:noに&が付いていなくて、他の変数には&が付いているのは、なぜでしょうか。
を考えた方がよいですね。
fscanfで代入する変数を指定するときはすべてポインタですが、charの配列ならば、&はつけなくてもそれ自体がポインタと見なされます。逆にnoはintという配列でもなくポインタでもない変数ですがなぜ&がついていないんでしょうかねえ。&をつけるのが逆ですよ。
それと、fscanfが返すのは、代入された変数の数です。
5つ全部入ったのを確認するのであれば、EOFでなく5と比較すべきですねえ。
Re: ファイルデータの更新処理
Posted: 2012年7月02日(月) 22:59
by taz
コード:
/* 新規登録 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE *fp;
char *fname = "comma.csv";
main()
{
int no;
int ret;
printf("---会員管理システムメニュー---\n\n");
printf("1.新規登録\n");
printf("2.変更\n");
printf("3.削除\n");
printf("4.一覧表示\n");
printf("No? ");
ret=scanf("%d",&no);
if(no == 1)
{
ret = add_record();
}
else if(no == 2)
{
ret = update_record();
}
//else if(no == 3)
//{
// ret = del_record();
//}
//else if(no == 4)
//{
// ret = disp_all();
//
//}
}
int add_record()
{
int no;
char name[100];
char adress[100];
char tel[100];
char mail[100];
int choice;
printf("\n会員番号(0-10数値)? ");
scanf("%d",&no);
printf("会員名称(漢字,英語)? ");
scanf("%s",&name);
printf("住所(漢字,数字50文字)? ");
scanf("%s",&adress);
printf("電話番号(半角文字-で区切る)? ");
scanf("%s",&tel);
printf("メールアドレス(半角英数字)? ");
scanf("%s",&mail);
printf("新規登録しますか?(1:yes 2:no)? ");
scanf("%d",&choice);
if(choice == 2)
{
system("cls");
main();
}
fp = fopen(fname,"w");
if(fp == NULL)
{
printf("%ファイルが開けません\n",fname);
return -1;
}
fprintf(fp,"%d,%s,%s,%s,%s",no,name,adress,tel,mail);
fclose(fp);
printf("%sファイル書き込みが終わりました\n",fname);
return 0;
}
int update_record()
{
int no;
char name[100];
char adress[100];
char tel[100];
char mail[100];
int choice;
int ret;
int i;
char a[100]="会員名称(漢字,英語)? ";
char b[100]="住所(漢字,数字50文字)? ";
char c[100]="電話番号(半角文字-で区切る)? ";
char d[100]="メールアドレス(半角英数字)? ";
//入力する変数領域
char up_name[50];
char up_adress[100];
char up_tel[20];
char up_mail[50];
//ファイルから読み込んだ番号
int rno;
printf("\n会員番号(0-10数値)? ");
scanf("%d",&no);
fp = fopen(fname,"r");
if(fp == NULL)
{
printf("%sファイルが開けません\n",fname);
return -1;
}
while(feof(fp)==0)
{
if((ret = fscanf(fp,"%d,%[^,],%[^,],%[^,],%[^,]",&rno,name,adress,tel,mail)) == 5)
{
}
}
//入力した番号とファイルよ読み込んだ番号とをチェックする。同じなら変更する
if(no==rno)
{
printf("%s",name);
scanf("%s",&up_name);
printf("%s",adress);
scanf("%s",&up_adress);
printf("%s",tel);
scanf("%s",&up_tel);
printf("%s",mail);
scanf("%s",&up_mail);
printf("変更登録しますか?(1:yes 2:no)? ");
scanf("%d",&choice);
//選択がyesのとき書き込むデータとして変数に格納する
if(choice ==1)
{
//ここで配列変数に格納する(次回にします)
}
}
fclose(fp);
return 0;
if(choice == 2)
{
system("cls");
main();
}
}
ここまで、変更しましたが、会員番号でうまく検索出来ません。なぜでしょうか?アドバイスお願いします。
Re: ファイルデータの更新処理
Posted: 2012年7月03日(火) 05:31
by へにっくす
検索うんぬんより
次は構造体にして、
その次は配列を使って、
という手順を踏んだ方がいいと思いますが。
今のままじゃ1人分しかないので
検索とは言えないですw
Re: ファイルデータの更新処理
Posted: 2012年7月03日(火) 19:12
by taz(別PC)
こんばんは。
CSVファイル中には2件のデータが記述されています。
そのデータをキーボードから入力された値によって、
それぞれ出力させたいのですが、出来ないのでしょうか?
Re: ファイルデータの更新処理
Posted: 2012年7月03日(火) 19:46
by box
taz(別PC) さんが書きました:
CSVファイル中には2件のデータが記述されています。
そのデータをキーボードから入力された値によって、
それぞれ出力させたいのですが、出来ないのでしょうか?
できますよ。そのためのコードを書けば。
今のコードでは1人分にしか対応できていない、というだけのことだと思います。
# だから、まずデータ構造を決める方がいいって言ったのに…。
Re: ファイルデータの更新処理
Posted: 2012年7月03日(火) 21:19
by taz
もっと具体的に次にやるべき事を教えていただきますか?
Re: ファイルデータの更新処理
Posted: 2012年7月03日(火) 21:30
by box
1)1人分の属性として考えているものをすべて書き出す。
2)書き出した項目をメンバーとする構造体を定義する。
3)その構造体では1人分のデータを管理するので、複数人のデータを管理するには構造体の配列というデータ構造を考える必要がある。
4)お手元にあるという、2人分のデータをCSVファイルから読み取って、定義済の構造体の配列に格納する。
5)構造体の配列の中身をすべて出力して、CSVファイルの内容と一致しているかどうかを確認する。
さしあたってはこんなところでしょうか。
データの追加とか検索とかいうのは、その後ですね。
Re: ファイルデータの更新処理
Posted: 2012年7月04日(水) 02:02
by taz
コード:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE *fp;
char *fname = "comma.csv";
struct member {
int no;
char name[20];
char adress[20];
char tel[20];
char mail[20];
};
main()
{
int no;
int ret;
printf("---会員管理システムメニュー---\n\n");
printf("1.新規登録\n");
printf("2.変更\n");
printf("3.削除\n");
printf("4.一覧表示\n");
printf("No? ");
ret=scanf("%d",&no);
if(no == 1)
{
ret = add_record();
}
else if(no == 2)
{
ret = update_record();
}
//else if(no == 3)
//{
// ret = del_record();
//}
//else if(no == 4)
//{
// ret = disp_all();
//
//}
}
int update_record()
{
struct member member[20]={0};
int no;
int choice;
int ret;
int i;
char up_name[50];
char up_adress[100];
char up_tel[20];
char up_mail[50];
int rno;
printf("\n会員番号(0-10数値)? ");
scanf("%d",&no);
fp = fopen(fname,"r");
if(fp == NULL)
{
printf("%sファイルが開けません\n",fname);
return -1;
}
//while(feof(fp)==0)
//{
for(i=0;i<2;i++)
{
if((fscanf(fp,"%d,%[^,],%[^,],%[^,],%[^,]",&member[i].no,member[i].name,member[i].adress,member[i].tel,member[i].mail)) != EOF)
{
printf("%s",member[i].name);
printf("%s",member[i].adress);
printf("%s",member[i].tel);
printf("%s",member[i].mail);
}
}
//}
//入力した番号とファイルよ読み込んだ番号とをチェックする。同じなら変更する
//if(no==rno)
//{
//printf("%s",member[i].name);
//scanf("%s",&up_name);
//printf("%s",member[i].adress);
//scanf("%s",&up_adress);
//printf("%s",member[i].tel);
//scanf("%s",&up_tel);
//printf("%s",member[i].mail);
//scanf("%s",&up_mail);
//printf("変更登録しますか?(1:yes 2:no)? ");
//scanf("%d",&choice);
//選択がyesのとき書き込むデータとして変数に格納する
//if(choice ==1)
//{
//ここで配列変数に格納する(次回にします)
//}
//}
fclose(fp);
return 0;
if(choice == 2)
{
system("cls");
main();
}
}
構造体を使用して、ファイルから読み込んだ値をその構造体に代入し、出力しようとしているのですが、
1番目のデータは出力されるのですが、2番目のデータが出力されません。
なぜでしょうか?データはCSV形式です。
Re: ファイルデータの更新処理
Posted: 2012年7月04日(水) 11:13
by non
fscanf(fp,"%d,%[^,],%[^,],%[^,],%[^,]"
これの最後がまずいんじゃないの?
Re: ファイルデータの更新処理
Posted: 2012年7月04日(水) 11:31
by taz(別PC)
まずいとは、どうまずいのでしょうか?
Re: ファイルデータの更新処理
Posted: 2012年7月04日(水) 12:07
by takumi@0832080.com
taz(別PC) さんが書きました:まずいとは、どうまずいのでしょうか?
HINT 言われた周辺いじったり,色々試行錯誤してみたらいいと思う.
(個人的には&(member
.no)のが何言ってるのか分かりやすい.)
Re: ファイルデータの更新処理
Posted: 2012年7月04日(水) 12:58
by non
CSVのファイルの行の最後にカンマはありますか?
Re: ファイルデータの更新処理
Posted: 2012年7月04日(水) 13:14
by taz
non さんが書きました:CSVのファイルの行の最後にカンマはありますか?
CSVのファイルの行の最後にカンマを入れましたがだめですね。
Re: ファイルデータの更新処理
Posted: 2012年7月04日(水) 13:55
by takumi@0832080.com
taz さんが書きました:non さんが書きました:CSVのファイルの行の最後にカンマはありますか?
CSVのファイルの行の最後にカンマを入れましたがだめですね。
俺はそーいうことじゃないと思います.
ってか両方試そうよ.
それでだめなら最後にカンマないのになんで最後%[^,]なのってことでしょ.
Re: ファイルデータの更新処理
Posted: 2012年7月04日(水) 14:24
by 顔顔プリン
このサイトの
http://dixq.net/rp/11.html
ここをみればCSVの行の最後に何があるかわかると思いますよ
Re: ファイルデータの更新処理
Posted: 2012年7月04日(水) 15:31
by taz
コード:
for(i=0;i<2;i++)
{
if((fscanf(fp,"%d,%[^,],%[^,],%[^,],%s",&(member[i].no),member[i].name,member[i].adress,member[i].tel,member[i].mail)) != EOF)
{
printf("%s\n",member[i].name);
printf("%s\n",member[i].adress);
printf("%s\n",member[i].tel);
printf("%s\n",member[i].mail);
}
}
上記で、2つ目のデータも表示することが出来ました。
次に、キーボードで入力した番号で、出力情報を検索し、またそれを編集するようにしたいのですが、どのように記述したらよいでしょうか?箇条書きで教えていただけるとありがたいです。
Re: ファイルデータの更新処理
Posted: 2012年7月04日(水) 21:50
by taz
コード:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE *fp;
char *fname = "comma.csv";
struct member {
int no;
char name[20];
char adress[20];
char tel[20];
char mail[20];
};
main()
{
int no;
int ret;
printf("---会員管理システムメニュー---\n\n");
printf("1.新規登録\n");
printf("2.変更\n");
printf("3.削除\n");
printf("4.一覧表示\n");
printf("No? ");
ret=scanf("%d",&no);
if(no == 1)
{
ret = add_record();
}
else if(no == 2)
{
ret = update_record();
}
//else if(no == 3)
//{
// ret = del_record();
//}
//else if(no == 4)
//{
// ret = disp_all();
//
//}
}
int update_record()
{
struct member member[20]={0};
int no;
char name[100];
char adress[100];
char tel[100];
char mail[100];
int choice=0;
int ret;
int i=0;
char a[100]="会員名称(漢字,英語)? ";
char b[100]="住所(漢字,数字50文字)? ";
char c[100]="電話番号(半角文字-で区切る)? ";
char d[100]="メールアドレス(半角英数字)? ";
//入力する変数領域7
char up_name[50];
char up_adress[100];
char up_tel[20];
char up_mail[50];
//ファイルから読み込んだ番号
int rno;
printf("\n会員番号(0-10数値)? ");
scanf("%d",&no);
fp = fopen(fname,"r");
if(fp == NULL)
{
printf("%sファイルが開けません\n",fname);
return -1;
}
while(feof(fp)==0)
{
if((fscanf(fp,"%d,%[^,],%[^,],%[^,],%s",&(member[i].no),member[i].name,member[i].adress,member[i].tel,member[i].mail)) != EOF)
{
if(no==member[i].no)
{
printf("%s\n",member[i].name);
scanf("%s\n",member[i].name);
printf("%s\n",member[i].adress);
scanf("%s\n",member[i].adress);
printf("%s\n",member[i].tel);
scanf("%s\n",member[i].tel);
printf("%s\n",member[i].mail);
scanf("%s\n",member[i].mail);
printf("%s\n","変更登録しますか?(1:yes 2:no) ");
scanf("%d\n",&choice);
if(choice==1)
{
}
else if(choice==2)
{
system("cls");
main();
}
}
}
i++;
}
fclose(fp);
return 0;
}
ここまで出来ました。しかし、最初の名前を入力するところで、2回入力しないと次の住所の項目に進みません。
また、最後の登録しますか?の質問の際に2を選択してもメイン関数に戻りません。どうしてでしょうか?
アドバイスお願いします。
Re: ファイルデータの更新処理
Posted: 2012年7月05日(木) 07:53
by beatle
main関数を再帰的に呼び出している(103行目)のは意図したことなのでしょうか?
普通のプログラムでは、自分でmainを呼び出すようなことはしません。
想像するに、update_record関数からmain関数へ戻りたいだけなのでしょうが、それならreturnすべきです。
Re: ファイルデータの更新処理
Posted: 2012年7月05日(木) 10:47
by taz
beatle さんが書きました:main関数を再帰的に呼び出している(103行目)のは意図したことなのでしょうか?
普通のプログラムでは、自分でmainを呼び出すようなことはしません。
想像するに、update_record関数からmain関数へ戻りたいだけなのでしょうが、それならreturnすべきです。
期待動作としては、意図してやっていることです。
コード:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE *fp;
char *fname = "comma.csv";
struct member {
int no;
char name[20];
char adress[20];
char tel[20];
char mail[20];
};
main()
{
int no;
int ret;
printf("---会員管理システムメニュー---\n\n");
printf("1.新規登録\n");
printf("2.変更\n");
printf("3.削除\n");
printf("4.一覧表示\n");
printf("No? ");
ret=scanf("%d",&no);
if(no == 1)
{
ret = add_record();
}
else if(no == 2)
{
ret = update_record();
}
//else if(no == 3)
//{
// ret = del_record();
//}
//else if(no == 4)
//{
// ret = disp_all();
//
//}
}
int update_record()
{
struct member member[20]={0};
int no;
char name[100];
char adress[100];
char tel[100];
char mail[100];
int choice=0;
int ret;
int i=0;
char a[100]="会員名称(漢字,英語)? ";
char b[100]="住所(漢字,数字50文字)? ";
char c[100]="電話番号(半角文字-で区切る)? ";
char d[100]="メールアドレス(半角英数字)? ";
//入力する変数領域7
char up_name[50];
char up_adress[100];
char up_tel[20];
char up_mail[50];
//ファイルから読み込んだ番号
int rno;
printf("\n会員番号(0-10数値)? ");
scanf("%d",&no);
fp = fopen(fname,"r");
if(fp == NULL)
{
printf("%sファイルが開けません\n",fname);
return -1;
}
while(feof(fp)==0)
{
if((fscanf(fp,"%d,%[^,],%[^,],%[^,],%s",&(member[i].no),member[i].name,member[i].adress,member[i].tel,member[i].mail)) != EOF)
{
if(no==member[i].no)
{
printf("%s\n",member[i].name);
scanf("%s\n",member[i].name);
printf("%s\n",member[i].adress);
scanf("%s\n",member[i].adress);
printf("%s\n",member[i].tel);
scanf("%s\n",member[i].tel);
printf("%s\n",member[i].mail);
scanf("%s\n",member[i].mail);
printf("%s\n","変更登録しますか?(1:yes 2:no) ");
scanf("%d\n",&choice);
if(choice==1)
{
fprintf(fp,"%d,%s,%s,%s,%s",member[i].no,member[i].name,member[i].adress,member[i].tel,member[i].mail);
}
else if(choice==2)
{
system("cls");
main();
}
}
}
i++;
}
fclose(fp);
printf("%s\n","ファイル書き込みが終わりました\n");
return 0;
}
現状このようなコードですが、不具合がいくつかあります。
①
コード:
printf("%s\n",member[i].name);
scanf("%s\n",member[i].name);
この部分で、2回入力しないと、次のコードに進みません。
②
コード:
printf("%s\n","変更登録しますか?(1:yes 2:no) ");
scanf("%d\n",&choice);
if(choice==1)
{
fprintf(fp,"%d,%s,%s,%s,%s",member[i].no,member[i].name,member[i].adress,member[i].tel,member[i].mail);
}
else if(choice==2)
{
system("cls");
main();
}
この部分で、choiceで、1か2を選択する前にプログラムが終わってしまいます。
どなたかアドバイスよろしくお願いします。
Re: ファイルデータの更新処理
Posted: 2012年7月05日(木) 11:38
by かずま
taz さんが書きました:
現状このようなコードですが、不具合がいくつかあります。
①
コード:
printf("%s\n",member[i].name);
scanf("%s\n",member[i].name);
この部分で、2回入力しないと、次のコードに進みません。
scanf の書式に "\n" を書いてはいけません。
Re: ファイルデータの更新処理
Posted: 2012年7月05日(木) 13:02
by taz
ありがとうございます。問題を解決することが出来ました。
しかし、fp = fopen(fname,"a"); の部分で上書き禁止にして、
fprintf(fp,"%d,%s,%s,%s,%s",no,name,adress,tel,mail); でファイルに書き込みを行っているのですが、
2行のデータが1行続きのデータになり、なにやらおかしたデータになってしまいます。
例)1,takesihta,明石市,090-3222-1234,
a@yahoo.co.jp,takeuti,神戸市,090-3245-3221,
v@yahoo.co.jp
Re: ファイルデータの更新処理
Posted: 2012年7月05日(木) 19:54
by taz
色々と質問させていただきましたが、なんとか解決しました。ありがとうございました。
最終コード↓
コード:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE *fp;
char *fname = "comma.csv";
struct member {
int no;
char name[20];
char adress[20];
char tel[20];
char mail[20];
};
main()
{
int no;
int ret;
printf("---会員管理システムメニュー---\n\n");
printf("1.新規登録\n");
printf("2.変更\n");
printf("3.削除\n");
printf("4.一覧表示\n");
printf("No? ");
ret=scanf("%d",&no);
if(no == 1)
{
ret = add_record();
}
else if(no == 2)
{
ret = update_record();
}
//else if(no == 3)
//{
// ret = del_record();
//}
//else if(no == 4)
//{
// ret = disp_all();
//
//}
}
int add_record()
{
int no;
char name[100];
char adress[100];
char tel[100];
char mail[100];
int choice;
printf("\n会員番号(0-10数値)? ");
scanf("%d",&no);
printf("会員名称(漢字,英語)? ");
scanf("%s",&name);
printf("住所(漢字,数字50文字)? ");
scanf("%s",&adress);
printf("電話番号(半角文字-で区切る)? ");
scanf("%s",&tel);
printf("メールアドレス(半角英数字)? ");
scanf("%s",&mail);
printf("新規登録しますか?(1:yes 2:no)? ");
scanf("%d",&choice);
if(choice == 2)
{
system("cls");
main();
}
fp = fopen(fname,"a");
if(fp == NULL)
{
printf("%sファイルが開けません\n",fname);
return -1;
}
fprintf(fp,"%d,%s,%s,%s,%s\n",no,name,adress,tel,mail);
fclose(fp);
printf("%sファイル書き込みが終わりました\n",fname);
return 0;
}
int update_record()
{
struct member member[20]={0};
int no;
char name[100];
char adress[100];
char tel[100];
char mail[100];
int choice=0;
int ret;
int i=0;
int g=0;
char a[100]="会員名称(漢字,英語)? ";
char b[100]="住所(漢字,数字50文字)? ";
char c[100]="電話番号(半角文字-で区切る)? ";
char d[100]="メールアドレス(半角英数字)? ";
//入力する変数領域7
char up_name[50];
char up_adress[100];
char up_tel[20];
char up_mail[50];
//ファイルから読み込んだ番号
int rno;
printf("\n会員番号(0-10数値)? ");
scanf("%d",&no);
fp = fopen(fname,"r");
if(fp == NULL)
{
printf("%sファイルが開けません\n",fname);
return -1;
}
while(feof(fp)==0)
{
if((fscanf(fp,"%d,%[^,],%[^,],%[^,],%s",&(member[i].no),member[i].name,member[i].adress,member[i].tel,member[i].mail)) != EOF)
{
if(no==member[i].no)
{
printf("%s\n",member[i].name);
scanf("%s",member[i].name);
printf("%s\n",member[i].adress);
scanf("%s",member[i].adress);
printf("%s\n",member[i].tel);
scanf("%s",member[i].tel);
printf("%s\n",member[i].mail);
scanf("%s",member[i].mail);
printf("%s\n","変更登録しますか?(1:yes 2:no) ");
scanf("%d",&choice);
if(choice==2)
{
system("cls");
main();
}
}
}
i++;
}
fclose(fp);
fp = fopen(fname,"w");
fprintf(fp,"%d,%s,%s,%s,%s\n",member[0].no,member[0].name,member[0].adress,member[0].tel,member[0].mail);
fclose(fp);
fp = fopen(fname,"a");
g=1;
while(g<i-1)
{
fprintf(fp,"%d,%s,%s,%s,%s\n",member[g].no,member[g].name,member[g].adress,member[g].tel,member[g].mail);
g++;
}
fclose(fp);
printf("%s","ファイル書き込みが終わりました");
return 0;
}