ユーザーからいくつかの情報(名前、住所、連絡先番号)を取得し、それを構造体に格納しています。次に、これを「r+」モードで開いたファイルに保存します。行ごとに読んで、入力しようとしているエントリがすでに存在するかどうかを確認します。存在する場合は終了します。それ以外の場合は、ファイルの最後にこのエントリを追加します。問題は、ファイルを「r +」モードで開くと、セグメンテーション違反が発生することです。
コードは次のとおりです。
struct cust{
char *frstnam;
char *lastnam;
char *cntact;
char *add;
};
ここで、この関数について考えてみましょう。この関数で情報の構造体を渡します。その仕事は、この構造体がすでに存在するかどうかを確認することです。そうでない場合は、ファイルの終わりに追加します。
void check(struct cust c)
{
struct cust cpy;
FILE *f;
f=fopen("Customer.txt","r+");
int num=0;
if (f!= NULL){
while (!feof(f)) {
num++;
fread(&cpy,sizeof(struct cust),1,f);
if ((cpy.frstnam==c.frstnam)&(cpy.lastnam==c.lastnam)&(cpy.cntact==c.cntact)&(cpy.add==c.add))
{
printf("Hi %s %s. Nice to meet you again. You live at %s and your contact number is %s\n", cpy.frstnam,cpy.lastnam,cpy.add,cpy.cntact);
return;
}
}
fwrite(&c,sizeof(struct cust),1,f);
fclose (f);
}
printf("number of lines read is %d\n",num);
}