検索の方法を教えて頂きたいです。
現在、テキストファイルの検索プログラムを課題で行っているのですが、どう処理すればよいか、苦悩しています。先生には、構造体を利用するよう言われています。どなたか、アドバイスを頂けないでしょうか?テキストファイルの内容は自分で適当に作りました。このようにしています。
→ファイル名(soccer.txt)ファイルの中身→ 例「 番号,名前,年齢 」
1 ,川口 能活,33
38,楢崎 正剛,40
20,川島 永嗣,22
10,中澤 佑二,35
51,駒野 友一,19
9 ,中村 俊輔,29
22,遠藤 保仁,17
15,鈴木 啓太,32
19,本田 圭佑,51
28,家長 昭博,25
30,高原 直泰,18
7 ,播戸 竜二,44
問題の流れは、
(1)条件を選択して下さい[1~4]
1:全部表示
2:番号で検索
3:名前で検索
4:年齢で検索
99:終了
(2) 1番を選んだら、その名の通りファイルの中身を全部表示する。
(3) 2番を選んだら、さらに、番号の条件を選んで入力[1~4]
1: 1~9 , 2: 10~19 , 3: 20~29 , 4: 30以上
とし、条件にヒットするとその行を表示するよう、考えています。
一応、全部表示は、ソースはめちゃくちゃかもしれませんが、全部表示できたので、全部の検索方法をと言うと、図々しいと思うので、番号で検索だけでも、なにかアドバイス頂けたらと思っています。
どうぞ、宜しくお願いします。(泣)
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
struct data{
int no; // 番号
char name[20]; // 氏名
int age; // 年齢
};
int search_all(struct data *lis);
void search_no(int number);
int main()
{
int a;
int number;
data list1[12];
while(a){
printf("条件を選択して下さい[1~4]\n");
printf(" 1:全部表示\n");
printf(" 2:番号で検索\n");
printf(" 3:名前で検索\n");
printf(" 4:年齢で検索\n");
printf(" 99:終了\n");
scanf("%d", &a);
if(a == 1){
// 全部表示
printf("全部表示\n");
search_all(list1);
}
//番号で検索
else if(a == 2){
printf("番号の条件を選んで入力して下さい[1~4]\n");
printf(" 1: 1~9\n 2: 10~19\n 3: 20~29\n 4: 30以上\n");
scanf("%d", &number);
search_no(number);
}
}
return 0;
}
//ファイルの情報を取得する
int search_all(struct data *lis)
{
FILE *fp;
char s[20];
char str1[20]; //番号を格納
char str2[20]; //名前を格納
char str3[20]; //年齢を格納
fp = fopen("soccer.txt", "r");
//1行単位で読込み
while(fp != NULL){
fgets(s, 20, fp);
if (feof(fp)){
break;
}
//番号を取得する
strncpy(str1, s, 2);
//NULL文字追加
str1[2] = '\0';
lis->no = (int)str1;
//名前を取得する
strncpy(str2, &s[3], 9);
//NULL文字追加
str2[9] = '\0';
strcpy(lis->name, str2);
//年齢を取得する
strncpy(str3, &s[13], 2);
//NULL文字追加
str3[2] = '\0';
lis->age = (int)str3;
printf("%s %s %s \n", lis->no, lis->name, lis->age);
}
fclose(fp);
return 0;
}
//番号検索
void search_no(int number)
{
printf("該当の番号%dの行を表示\n", number);
}
補足
ありがとうございます。おかげさまでできましたが、どうしてこの場合は%sではなくて、%cなのですが、教えてください。