• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:検索機能の実装について)

検索機能の実装について

このQ&Aのポイント
  • データ管理プログラムの検索機能についての質問です。コンパイルしても該当項目が表示されない場合の修正方法と、大文字小文字区別なし・完全一致で一覧表示する方法を教えてください。
  • "const"の意味が分からないため、説明していただけると助かります。
  • 質問文章の構造体定義と検索機能の関数のコードも添付しています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

> 1) これは学校の課題なんですけど、関数内で入力を促すのは、検索機能を関数として実装しなければならないからです。 コンソールから入力するのなら、引数で与える必要がなくなります。 > 2) 確かにこれでは無視していることになってしまいますね…。ではmain関数でどのような値を呼び出せば上手くいくのですか? mainで検索文字列の入力を促し、それを関数に引き渡します。

Taka6223
質問者

お礼

分かりました。これを参考にもう一度やってみます。ご教授ありがとうございました!あと1つ質問なんですけど、"const"とはどのような役割を果たすのか教えていただけないでしょうか。

その他の回答 (5)

回答No.6

> "const"とはどのような役割を果たすのか教えていただけないでしょうか。 constとは"書き換えない/変更しない"という意味。 なので const char * は"この関数は、与えられた文字列を書き換えません"という呼び出し側との約束となります。 なので、関数内で書き換えているのは約束違反です。 # 詳しくはしかるべき参考書を読んでください。

Taka6223
質問者

お礼

いろいろな参考書を読んでみます。いろいろとありがとうございました。

回答No.5

> ただ、空白までは目的の検索文字列になっていました。 ではその(空白までの)文字列と"完全に一致するアーチスト"は登録されているのですね? そうでないと見つからないのは当然です。

Taka6223
質問者

補足

はい、ちゃんと登録されています。 一応、登録、一覧表示、セーブ、ロードは出来るようになっていて、ロードしたものを一覧表示するときちんと出てきます。

回答No.3

空白を含む文字列を scanf("%s",search_string)で入力していませんか? 入力の直後に printf("[%s]を探します\n", search_string); を追加して確認してください。 表示されたのは目的の検索文字列ですか?

Taka6223
質問者

補足

空白は認識しませんでした。そこはミスということですよね。 ただ、空白までは目的の検索文字列になっていました。

回答No.2

> 3) ... const char *search_string:検索文字列 なのに何故、関数内で入力を促すのですか? 呼び出すときのbufには何が入っているのですか? その値(文字列)を無視していいのですか?

Taka6223
質問者

補足

1) これは学校の課題なんですけど、関数内で入力を促すのは、検索機能を関数として実装しなければならないからです。 2) 確かにこれでは無視していることになってしまいますね…。ではmain関数でどのような値を呼び出せば上手くいくのですか?また新たに別の文字列を宣言しておけば良いのですか?初心者なのでご質問にきちんと答えれていないかもしれませんがご教授よろしくお願いします。

回答No.1

-「該当項目が表示されません」とありますが、何が表示されますか? - この関数search_recordは何をしてくれるか、理解していますか? - 引数それぞれの意味は? - これをどのように呼び出していますか? - これを呼び出すとき、検索対象であるMusには正しく値が納められていますか? current_numの値は正しいですか?

Taka6223
質問者

補足

説明不足ですみません。 1) 表示されるのは”No applicable items!”です。 2) 自分としては、入力した文字列と一致したものを表示するという形にしているつもりではいるんですが…。 3) Music *mus:構造体配列の先頭アドレス   int current_num:現在の登録レコード数   const char *search_string:検索文字列 4) search_record(musiclist, num_record, buf);   musiclistはmain関数でMusic musiclistという風に配列を決めました。   num_recordはmain関数でのレコード数を表します。   bufはmain関数でchar型で宣言しています。 5) musには正しく納められています。current_numの値も正しいです。   これ以外の機能(登録、一覧表示、セーブ、ロード)では実行できていました。

関連するQ&A

専門家に質問してみよう