如果要输入字符串“ 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语句。
答案 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。