私はC++を学んでいますので、私と一緒にご負担をして、あらかじめ馬鹿馬鹿しいことをお詫び申し上げます。getline()を無限に実行している単語C++プログラムのマッチング?
「command.txt」というファイルの各行の最初の単語が「num_lines」、「num_words」、「num_chars」のいずれかに一致するコードを作成しようとしています。
最初の行の最初の単語が前述の単語と一致しない場合は、次の行が読み込まれます。 一致する単語(最初の単語のみ!)にヒットすると、一致する単語が出力されます。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
ifstream comm_in("commands.txt"); // opens file
string command_name = "hi"; // stores command from file
bool is_command() {
if (command_name == "num_words" || command_name == "num_chars" || command_name == "num_lines") {
return true;
} else {
return false;
}
}
// FIND a first word of a line in file THAT MATCHES "num_words", "num_chars" or "num_lines"
void get_command() {
string line;
char c;
while (!is_command()) { // if command_name does not match a command
// GET NEXT LINE OF FILE TO STRING
getline(comm_in, line);
// SUPPOSED TO GET THE FIRST WORD OF A STRING (CANT USE SSTREAM)
for (int i = 0; i < line.size(); i++) { // increment through line
c = line[i]; // assign c as index value of line
if (c == ' ' || c == '\t') { // if c is a space/tab
break; // end for loop
} else {
command_name += c; // concatenate c to command_name
} // if
} // for
} // while
return;
}
int main() {
get_command();
cout << command_name; // supposed to print "num_lines"
}
command.txtファイルの内容::
my bear is happy
and that it
great ha
num_lines sigh
それは正しくコンパイルが、私は私の端末でそれを実行すると、何も現れません。ここ
は、私のコードのすべてです;それはロードを停止するようには思われません。 これを修正するにはどうすればよいですか?
、
if(getline(comm_in, line))
に等しいです。何が止まるのですか? – Jaywhileループは、is_commandがtrueを返すとき、つまりcommand_name == "num_lines"のときに停止するので、command.txtファイルの4行目を読み終えたら停止する必要がありますか?この論理に何か問題はありますか? – Salvatross
これはどうしますか?ループを終了すると、プログラムを印刷して終了する必要があります。 – Jay