次のコード行では、入力テキスト ファイル (単語は改行で区切られています) 内のすべての単語を文字列のベクトルに配置し、各単語を裏返しにして、この変換された単語が入力ファイル内の単語のリスト。
私のバイナリ検索機能と wordTurn 機能は問題なく動作すると思います。コードでいくつかの簡単なテストを行ったところ、while(!myFile.eof()) ループを 2 回使用すると、コードが機能しない原因になる可能性があることがわかりました。機能しないということは、出力ファイル(「pairs.txt」)を空のドキュメントとして取得することを意味します(単語のペアのリストであるはずです)。
つまり、2 番目の while(!myFile.eof()) ループ本体に簡単な印刷コードを入れたところ、印刷されず、このループには達していないと結論付けました。最初の while(!myFile.eof()) ループをコメントアウトしたときに出力されたので、これは可能性が高いです。最初の while ループを最初の else 本体に配置しましたが、これは違いはありませんでした。
何が問題だと思いますか?これら 2 つのループ本体を 2 番目のループに結合しようとしたところ、出力ファイルに何かが生成されましたが、これはこのコードが行うべきことではなく、論理的に正しくありませんでした。
アドバイスをいただければ幸いです。
int main(int argc, char* argv[]) {
vector<string> words;
ifstream myFile(argv[1]);
ofstream outputFile("pairs.txt");
string vocab;
string s;
int count;
while(!myFile.eof()) { //first while(!myFile.eof()) loop
getline(myFile, s);
words.push_back(s);
}
if(argc != 2) {
cout << "Usage: provide the name of one input file after the dictlookupHN executable file." << endl;
return (1);
}
else {
if(!myFile.is_open()) {
cerr << "Error: unable to open file " << argv[1] << endl;
return (1);
}
else {
while(!myFile.eof()) { //second while(!myFile.eof()) loop
getline(myFile, vocab);
string turnedWord = wordTurn(vocab);
if(binsearch(words, turnedWord) != "") {
outputFile << vocab << ":" << turnedWord << endl;
count++;
}
}
}
}
myFile.close();
outputFile.close();
return 0;
}