質問: C++でテキストファイルを読みvector配列に格納した単語に、二分探索を適用して、指定された単語を検索するプログラムを作成しています. 辞書順にソートを行った後に、探索単語の受け付けと探索の実行を繰り返すループを入れたいです.探索は終了指示マーク($$)を受け付けるまで繰り返します. コードを以下のように修正したのですが, if (!inFile) { cout << "入力ファイルを開けません" << endl; return; } のreturnの部分に「'main': 関数が値を戻すように宣言されていますが、関数定義に 'return' ステートメントがありません」というエラーが出ます.エラーを消すには,コードをどのように修正したらよいでしょうか? 他にもおかしいところがあったら教えてください. よろしくお願いします. ``` #include #include #include #include #include using namespace std; //メイン関数 int main() { ifstream inFile; //入力ファイル string word; //単語 vector vector;//vector配列 //入力ファイルを開く inFile.open("test.txt"); // 入力ファイルが開けなければ終了する if (!inFile) { cout << "入力ファイルを開けません" << endl; return; } //ファイルから単語を読み込む inFile >> word; //ファイルの末尾でなければ、以下の処理を繰り返す while (!inFile.eof()) { //単語を格納する vector.push_back(word); //新しい単語を読み込む inFile >> word; } //vector配列に格納した単語を、辞書順にソートする sort(vector.begin(), vector.end()); string a; while ("$$"==a ) { cout << "探索単語?"; cin >> a; binary_search(vector.begin(), vector.end(), a); if(true){ cout << "存在する" << endl; } else { cout << "存在しない" << endl; } } } ```
回答: いろいろとやばそうな部分がありますが,とりあえず... > > 探索単語の受け付けと探索の実行を繰り返すループを入れたいです.探索は終了指示マーク($$)を受け付けるまで繰り返します. > > > この文章を読めば, 1. ループが必要であって, 2. そのループの内側に,「探索単語の入力処理」と「探索処理」を書く必要があり, 3. 入力されたものが終了指示マークか否かの判定結果によってループを抜ける判定処理が必要である ということがわかりませんか...? 少なくとも ``` ループ { ・探索単語の入力 ・if( 入力されたものが終了指示マークである ){ ループを抜ける } ・探索する ・(探索した結果の情報をどうしたいのか不明ですが,表示するだとか必要な処理を行う) } ``` みたいな形にコードを書きましょうよ. 現在のエラーに関しては,「main()を戻り値の無い関数として書いているのにreturnで戻り値を返そうとしているのが矛盾」ということなので, そのエラーだけを見るならば あなたがどうしたいのか(何かを返したいのか否か)に合わせて修正すればよかろうと思うのですが, そこだけを今ピンポイントで解消したところでプログラム自体が思ったような動きをしないでしょうから, とりあえず上記のようにコードそのものを修正することを優先してはどうでしょうか. その過程で今のエラーは勝手に消滅するのではないかと思います.