また、氏名をキーボードから1度に読み込み場合、空白付きで読み込む必要がある。その ためには、getsあるいはfgetsを使うことになる。scanfを使うことも考 えられるが、その場合は空白が読み込めないのでその処理が必要である。それぞれは、
この空白を考慮すると、電話帳のデータベースを検索するプログラムには、次のような動 作が必要である。
#include <stdio.h>
#include <string.h>
int main(void)
{
FILE *read_list;
char r_shimei[16][64];
char r_tel[16][16];
char search_name[32];
int compare_char;
int i;
/*---- 検索する名前の読み込みと改行処理 ---- */
printf("\n\t検索したい人の名前を入力してください(ローマ字):",i+1);
fgets(search_name,64,stdin); /* 検索する名前の読み込み */
printf("\n");
search_name[strlen(search_name)-1]=' '; /* 改行を空白に変換 */
compare_char = strlen(search_name); /* 比較する文字数(空白を含む) */
/*---- ファイルのオープン ---- */
if((read_list = fopen("address.txt","r"))==NULL){
printf("ファイルが開けません!!! \n");
return 1;
}
/*---- データの読み込みと比較、表示 --- */
for(i=0;i<=9;i++){
fgets(r_shimei[i],64,read_list); /* 氏名の読み込み(改行付) */
r_shimei[i][strlen(r_shimei[i])-1]=' '; /* 改行を空白に変換 */
fgets(r_tel[i],16,read_list); /* 電話番号の読み込み(改行付) */
r_tel[i][strlen(r_tel[i])-1]=' '; /* 改行を空白に変換 */
if(strncmp(r_shimei[i],search_name,compare_char)==0){
printf("\t\t氏名:%s\t電話番号:%s\n",r_shimei[i], r_tel[i]);
}
}
printf("\n");
fclose(read_list); /* ファイルのクローズ */
return 0;
}