これはあまりにも有名な質問ですが、答えが見つからないようです
私はこのようなものを持っています:
while (true) {
std::cout << "\nCommand> ";
std::cin.get(input, MAX, '\n');
std::string cmdtemp = input;
std::string token;
std::istringstream issc(cmdtemp);
std::string cmd[MAX];
while ( getline(issc, token, ' ') )
{
cmd[b] = token;
b++;
}
if (cmd[0] == "help") {
Help cmd(cmd);
std::cin.ignore(100, '\n') ;
}
else if (cmd[0] == "modify")
Command* cmd = new Modify;
std::cin.ignore(100, '\n') ;
else if (cmd[0] == "convert")
Command* cmd = new Convert;
std::cin.ignore(100, '\n') ;
else if (cmd[0] == "show")
Command* cmd = new Show;
std::cin.ignore(100, '\n') ;
else if (cmd[0] == "getrates")
Command* cmd = new Getrates;
std::cin.ignore(100, '\n') ;
else {
std::cout << "Wrong command. Type help for Help.";
std::cin.ignore(100, '\n') ;
}
2回目の入力後、これが無限ループになって(2回目の入力でもストリームはクリアされるはずなのに)、また、例えば「help」を2回入力すると、1回目は効くが2回目は効かない』 t
ユーザー入力を何度でも正しく取得するにはどうすればよいですか?
編集: ユーザーがコマンドの 1 つを入力すると (そうでない場合)、オブジェクトが作成され、コンストラクターが実行されます。「ヘルプ」の場合、コンストラクターは説明付きのコマンドリストを表示します。私の場合、これは一度だけ機能します。「help」と入力すると、コンストラクターは機能しますが、もう一度「help」と入力すると、無限に多くの「間違ったコマンド」(if else の else 条件) が表示されます。それは私が推測するストリームのためですが、私は cin.ignore(...) がクリアされ、コードが機能するはずです。この説明で十分だと思います:)
前もって感謝します:)