如何防止 if 语句在接收满足语句的多个输入时执行

How to prevent if statement from executing when receiving multiple inputs that fulfill the statement

本文关键字:语句 输入 执行 if 何防止 满足      更新时间:2023-10-16

所以我最近完成了一个关于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, ' ');