为什么我的 if else 语句不起作用并从数组中输出正确的索引?
Why is my if else statements not working and outputting the right index from an array?
这段代码应该从用户的输入中输出正确的颜色。用户的输入存储在数组中。但是,else 语句未执行/工作。
string eyecolor;
string colorcin[4];
void color() {
cout << "I am going to ask you for 4 colors." << endl;
for (int a = 0; a < 4; a++) {
cout << "Color " << a + 1 << ": ";
cin >> colorcin[a];
}
}
void eyes() {
cout << "What color are your eyes? ";
cin >> eyecolor;
if (eyecolor == "blue" || "Blue" || "green" || "Green" || "hazel" ||
"Hazel") {
cout << "Your favorite color is " << colorcin[0] << endl;
} else {
cout << "Your favorite color is " << colorcin[1] << endl;
}
}
int main() {
color();
eyes();
}
这不是比较多个值的方式:
if (eyecolor == "blue" || "Blue" || "green" || "Green" || "hazel" ||
"Hazel") {
这实际上做的是首先将eyecolor
与"blue"
进行比较。 如果这为 false,则在布尔上下文中评估"Blue"
。 因为它是一个字符串常量,所以它衰减到指向其第一个元素的指针,并且由于该指针无法NULL
,因此它的计算结果为 true,因此此表达式将始终为 true。
您需要将eyecolor
与每个可能的值显式比较:
if (eyecolor == "blue" || eyecolor == "Blue" || eyecolor == "green" ||
eyecolor == "Green" || eyecolor == "hazel" || eyecolor == "Hazel") {
haircolor
也是如此.
您没有正确指定布尔表达式。例如,你写道:
if (haircolor == "blond" || "Blond" || "Red" || "red" || "Auburn" || "auburn")
这应该是:
if (haircolor == "blond" || haircolor == "Blond" || haircolor == "Red"
|| haircolor == "red" || haircolor == "Auburn" || haircolor == "auburn")
文字字符数组(如"Blond"(将被隐式转换为布尔 true 值。
你的意思是hair();
函数吗? 它的工作正常 看
Pick a number betweem 1-100: 1
Pick another number between 1-100: 2
I am going to ask you for 4 colors.
Color 1: 1
Color 2: 2
Color 3: 3
Color 4: 4
What color is your hair? blond
Your favorite color is 3
Have a nice day.
在这里,很多答案解释了为什么你的方法在C++中不正确,但还没有人提供解决方案来解决多次重复一个变量的繁琐问题。
话虽如此,我不会详细介绍您的代码中存在错误的细节,相反,我将为您提供我的解决方案,在您需要经常使用此结构的情况下,它会使事情变得容易得多:
template <typename T, std::size_t TSize>
struct AnyOfThis { T values[TSize]; };
template <typename TFirst, typename... TOthers>
auto anyOf(TFirst&& first, TOthers&&... others) {
return AnyOfThis<std::decay_t<TFirst>, 1 + sizeof...(others)>{std::forward<TFirst>(first), std::forward<TOthers>(others)...};
}
template <typename T, std::size_t TSize>
bool operator==(const T value, const AnyOfThis<typename std::decay<T>::type, TSize>& anyOfThis) {
return std::find(std::begin(anyOfThis.values), std::end(anyOfThis.values), value) != std::end(anyOfThis.values);
}
基本上,它从可变参数函数创建一个静态数组。然后还有另一个函数用作比较器,它获取要比较的值并在数组中查找此值。
用例读起来也相当不错:
if (1 == anyOf(1, 2, 3)) {
// do stuff
}
正如你在下面的演示中看到的,使用一个额外的代码糖,你还可以将字符串文字放入anyOf
函数中,它会自动将它们转换为std::string
这样你就可以像这样比较它们:
std::string eyecolor("blue");
if (eyecolor == anyOf("blue", "green", "brown")) {
// do stuff
}
>现场演示相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 数组索引的值没有增加
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么我的代码在输出中增加了93天
- 为什么我的 if else 语句不起作用并从数组中输出正确的索引?
- 更改输出索引的颜色
- 尝试输出所有索引值(如果找到)
- 数组的某个索引的输出部分字符串
- 使用数组找到最高分的算法并输出该索引(最高得分)
- 如何使用QREGEXP解析PACMD列表输出并查找接收器索引和名称
- 对字符串进行索引时输出不正确
- 数组:将字符串数组的索引传递到Int数组的索引,仅用于输出
- 为什么空字符串可以在C++中输出索引 0 元素
- 如何在C中显示输出时获得链表索引
- 如何在c++中输出二维数组的偶数列索引并对其进行计算