为什么str!=“ hello” &&“再见”不起作用?

时间:2019-05-08 00:50:49

标签: c++ string function

如果要输入字符串“ hello”或“再见”,我正在尝试退出“ do”功能,此功能仅适用于“ hello”而不是“ goodbye”。 谁能向我解释我的功能有什么问题? 另外,如果有更好的方法,我也希望看到。 谢谢

“你好” || “再见” “你好”,“再见”

#include <iostream>
#include <string>



int main()
{
    std::string str;
    do {

        std::cout << "Say Hello, sir.";
        std::cin >> str;

    } while (str != "Hello" && "Goodbye");

    std::cout << "You're rude, bro";
}

我希望在输入“ Hello”或“ Goodbye”之后退出“ do”语句并继续执行cout语句。

3 个答案:

答案 0 :(得分:6)

条件str != "Hello" && "Goodbye"实际上是(str != "Hello") && "Goodbye"&&运算符不联接!=的多个操作数。这是一个完全独立的运算符。

&&的第一个操作数str != "Hello"str"Hello"进行比较,这就是您想要的。第二个操作数"Goodbye"不是您想要的。

"Goodbye"&&的操作数时,它将转换为bool。 (详细地,此字符串文字首先转换为指向其第一个字符的指针,然后转换为bool。)将非空指针转换为bool的结果为true。 / p>

所以str != "Hello" && "Goodbye"str != "Hello" && true相同,也与str != "Hello"相同。

您想要的条件是str != "Hello" && str != "Goodbye"

答案 1 :(得分:3)

您的while代码正在评估( str != "hello" && "goodbye")。在C ++中,它等于( (str != "hello") && true)"Goodbye"被评估为true,因为它是一个字符串文字,而由于它不是nullptr,则被评估为true。

您需要做(str != "Hello" && str != "Goodbye")

答案 2 :(得分:2)

关闭,您只需要更加明确即可。

str != "Hello" && str != "Goodbye"

您必须分别比较每个str。