如何防止 if 语句在接收满足语句的多个输入时执行
How to prevent if statement from executing when receiving multiple inputs that fulfill the statement
所以我最近完成了一个关于C++的初学者课程,并想制作我自己的"聊天机器人",因为显然这很容易并且已经完成了一百万次。我遇到的问题是,当用户输入与我的"if"语句中的多种可能性匹配时,它会多次发出命令。
class response{
public:
void answer() {
string x;
cin >> x;
if (x=="Hello"||x=="hello"||x=="Hi"||x=="hi"||x=="hey"||x=="Hey") {
cout << endl << "Hello!" << endl << endl;
}
else {
cout << endl << "I didn't understand that." << endl << endl;
}
} };
例如,如果您输入:"嘿嗨",则会得到:"您好!你好!
或者,如果您输入"嘿鱿鱼",您会得到"Hello!我不太明白这一点。
等等等等。我想知道是否有任何方法可以使它,除非您的整个字符串与确切的 x== 值匹配,否则它将执行 else 语句,并且只执行一次。
编辑:解决方案有效。感谢所有的帮助!你们中的一些人问我如何在main中使用class语句。我希望这有助于澄清我如何使用它:
int main()
{
cout << "Hello! I am Drew Bot 1.0." << endl << endl;
for(;;){
response test;
test.answer();
}
}
对于您描述的内容(这是有意义的,因为您正在编写聊天机器人),必须在循环中调用response::answer()
。
std:cin
的标记由空格字符分隔,因此当您将其流式传输到变量中时,您只会获得第一个单词,其余单词保留在std::cin
流中。抓住你的部分是,如果std::cin
已经有一个令牌,它不会等待用户输入。
因此,如果您在第一次调用response::answer
时键入"嘿嗨你好鱿鱼",它只会检查第一个单词。后续调用将检查其余单词,而不提示用户,直到输入流中没有剩余任何内容。
一种解决方案是使用 getline (std::cin, x);
代替std::cin >> x
.
getline
将读取到下一个换行符或 EOF,但您也可以指定自己的分隔符:getline(std::cin, x, ' ');
相关文章:
- 为什么无论输入如何,所有 if-else 语句都会打印?
- 如何在没有打印语句的情况下报告用户输入错误
- 我怎样才能接受输入作为双精度值并执行 IF ELSE 语句
- 检测要在 if 语句中使用的输入空格
- 是否可以编写C++不使用任何条件语句交换输入的函数?
- 为什么当我输入字符时,这个特定的 cin.get() 语句在C++中不起作用?
- 递归函数、布尔语句和输入C++
- C++ while 语句中的输入
- 如何在 C++ 中使用 if-then 语句正确计算用户输入
- 如何在C++中使用 if 语句终止向量输入
- 输入未正确读取条件语句
- 循环try..catch ..确保输入有效或使用控制语句
- 输入到字符串流并在单个语句中转换为字符串.可以没有帮助程序类
- 开关大小写语句中函数中的字符串输入会导致无限循环和绕过输入
- 如何引用无效的输入,然后重新输入和如果其他语句
- 如果语句输入以供指导
- 输入不会影响使用的 if 语句
- C 如何检查多个输入语句的首次输入
- 如何查找用户使用 do/while、While 语句或 For 语句输入的几个整数的总和
- c++ Switch语句输入