我知道这是一个太有名的问题,但我似乎找不到答案
我有这样的东西:
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') ;
}
在第二次输入之后,这变成了无限循环(尽管即使在第二次输入之后也应该清除流,对吗?),另外,例如,如果我输入“帮助”两次,第一个有效,但第二个无效吨
我能做些什么来尽可能多地正确获取用户输入?
编辑:当用户输入命令之一时(如果其他...),将创建一个对象并运行构造函数。在“帮助”的情况下,构造函数会显示带有解释的命令列表。在我的情况下,这只适用于一次。当我输入“帮助”时,构造函数可以工作,但是当我再次输入“帮助”时,它会显示无限多的“错误命令”(我的 if else 中的其他条件)。那是因为我猜是流,但我认为 cin.ignore(...) 应该清除并且代码应该可以工作。希望这个解释就足够了:)
提前致谢:)