検索処理について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
DOR

検索処理について

#1

投稿記事 by DOR » 15年前

二分探索を使わずにファイルnamelist.txt の入出力により
名前から電話番号を検索するプログラムを作成したいのですが、
どなたかアドバイスや解法を教えて頂けないでしょうか。

コード:


#include<stdio.h>
#define LINE_BUF 1024

int main(void){

	char name;
	char buf[LINE_BUF];
	FILE *fp=fopen("debug.txt","r");

	printf("検索したい名前を入力:");
	scanf("%s",&name);
	if(fscanf(fp,"%s",&buf)==name){
		printf("電話番号:");
		printf("%s",buf);
	}else{
                printf("リストにはありませんでした");
        }

	fclose(fp);
	return 0;
}

//namelist.txt

sigetora_kihi 011-375-7944
sigemasa_kotanzi 011-782-8302
shuukou_sirosuga 011-358-8598
sahiro_oziro 019-834-5027
koito_motoe 011-546-2606
shuuiti_yatutaba 08-8168-8408
 

non
記事: 1097
登録日時: 15年前

Re: 検索処理について

#2

投稿記事 by non » 15年前

fscanfは読み込んだデータの個数を返します。

それは、ともかく、完全一致なのか部分一致なのか、データーはソートされているのかなど、他に条件はないの?
non

アバター
bitter_fox
記事: 607
登録日時: 15年前
住所: 大阪府

Re: 検索処理について

#3

投稿記事 by bitter_fox » 15年前

DOR さんが書きました:二分探索を使わずにファイルnamelist.txt の入出力により
名前から電話番号を検索するプログラムを作成したいのですが、
どなたかアドバイスや解法を教えて頂けないでしょうか。

コード:

    char name;

	printf("検索したい名前を入力:");
	scanf("%s",&name);
	if(fscanf(fp,"%s",&buf)==name){
nameはchar型なのに
scanf("%s", &name);
とするのは正しくありません。

コード:

#define MAX_LEN_NAME 256

char name[MAX_LEN_NAME];

scanf("%s", name);
と言った風にするべきでしょう。(もっとセキュアにするならscanf("%*s", MAX_LEN_NAME-1, name)とします)

また、fscanfの戻り値はEOF(ファイルの終点の時)か入力に成功した項目数なのでnameと同じになる可能性は非常に低いですし、その比較では意図した結果にならないでしょう。
文字列の比較にはstrcmpを使用します。

それから、ファイルの読み込みはfscanfがEOFを返す(ファイルの終端に来る)までループで回すのが適切でしょう。

コード:

while (fscanf(fp, "%s%s", buf, telNumber) != EOF) // buf及びtelNumberは文字列(bufには名前、telNumberには電話番号が入る)
{
}
http://www9.plala.or.jp/sgwr-t/c/sec05.html - scanf
http://www9.plala.or.jp/sgwr-t/lib/strcmp.html - strcmp
http://www.kiso.tsukuba.ac.jp/~makimura ... de128.html - fscanf

DOR

Re: 検索処理について

#4

投稿記事 by DOR » 15年前

non さんが書きました:fscanfは読み込んだデータの個数を返します。

それは、ともかく、完全一致なのか部分一致なのか、データーはソートされているのかなど、他に条件はないの?
条件は特に指定されていないのですが、自分としては名前が部分一致して
電話番号を出力するような形にしたいと考えています。

アバター
bitter_fox
記事: 607
登録日時: 15年前
住所: 大阪府

Re: 検索処理について

#5

投稿記事 by bitter_fox » 15年前

DOR さんが書きました: 条件は特に指定されていないのですが、自分としては名前が部分一致して
電話番号を出力するような形にしたいと考えています。
部分一致するにはstrstr関数を用いて次のようにします。

コード:

if (strstr(str1, str2) != NULL)
{
}
http://www9.plala.or.jp/sgwr-t/lib/strstr.html

DOR

Re: 検索処理について

#6

投稿記事 by DOR » 15年前

様々なアドバイスありがとうございます。
おかげさまでなんとかなりました!

閉鎖

“C言語何でも質問掲示板” へ戻る