Che*_*pes 0 c compiler-warnings parentheses
printf(" 1| %d | %d | %d | %d | %d\n",
((coffee_strength == 'm' || coffee_strength == 'M') &&
(coffee1_type == 'l' || coffee1_type == 'L') ||
(coffee_strength == 'r' || coffee_strength == 'R') &&
(coffee1_type == 'b' || coffee1_type == 'B')),
((coffee_maker == 'r' || coffee_maker == 'R') &&
(coffee1_grindSize == 'c' || coffee1_grindSize == 'C') ||
(coffee_maker == 'C' || coffee_maker == 'c') &&
(coffee1_grindSize == 'f' || coffee1_grindSize == 'F')),
((coffee_servings >= 1) && (coffee_servings <= 4) &&
(coffee1_weight >= 0) && (coffee1_weight <= 250) ||
((coffee_servings >= 1) && (coffee_servings <= 9) &&
(coffee1_weight == 500)) ||
((coffee_servings >= 10) && (coffee1_weight == 1000))),
(((coffee_cream == 'y' || coffee_cream == 'Y') &&
(coffee1_cream == 'y' || coffee1_cream == 'Y') ||
(coffee_cream == 'n' || coffee_cream == 'N') &&
(coffee1_cream == 'n' || coffee1_cream == 'N'))),
((coffee1_temp >= 60.0) && (coffee1_temp <= 69.9) &&
(coffee_maker == 'r' || coffee_maker == 'R') ||
((coffee1_temp >= 70.0) && (coffee_maker == 'c' || coffee_maker == 'C'))));
Run Code Online (Sandbox Code Playgroud)
这是我正在尝试编译的代码。每次运行它时,我仍然会遇到与括号放置相关的问题。我已经多次编辑代码来尝试解决此问题,但问题仍然存在。有人对我应该做什么有什么建议吗?
运算符的&&优先级高于运算符||。因此,虽然合法,但编译器会告诉您执行此操作的代码:
a && b || c && d
Run Code Online (Sandbox Code Playgroud)
可能没有按照您的意愿行事。编译器会将其视为
(a && b) || (c && d)
Run Code Online (Sandbox Code Playgroud)
但据我们所知,你的意图是其他许多事情中的任何一件。
也许是这样:
a && (b || (c && d))
Run Code Online (Sandbox Code Playgroud)
或这个:
((a && b) || c) && d
Run Code Online (Sandbox Code Playgroud)
或者也许......这个:
a && (b || c) && d
Run Code Online (Sandbox Code Playgroud)
ETC。
它会产生影响,并且像这样的错误很常见,因此尽管您的代码可以编译,但当适当要求这样做时,它会发出警告(并且总是适当地要求)。不是因为它是错误的,而是因为你的意图不够明确,警告猴子被制服了(在这种情况下,在大多数情况下,这是一件好事)为了确保你得到你所期望的结果,编译器会询问您通过括号澄清您的表达。如果您使用 gcc 或 clang,-Wall 中包含的 -Wlogic-op-括号很可能会告诉您这一点。
从表面上看,您已经开始尝试解决这个问题,但您错过了几个实例。例如:
((coffee_servings >= 1) && (coffee_servings <= 4) &&
(coffee1_weight >= 0) && (coffee1_weight <= 250) || // <== here
((coffee_servings >= 1) && (coffee_servings <= 9) &&
(coffee1_weight == 500)) ||
((coffee_servings >= 10) && (coffee1_weight == 1000)))
Run Code Online (Sandbox Code Playgroud)
下面还有其他一些,我留给您去查找(一旦您开始嵌套括号并意识到a && b || c弹出了多少个位置,它们就非常明显)。
(((coffee_cream == 'y' || coffee_cream == 'Y') &&
(coffee1_cream == 'y' || coffee1_cream == 'Y') ||
(coffee_cream == 'n' || coffee_cream == 'N') &&
(coffee1_cream == 'n' || coffee1_cream == 'N'))),
Run Code Online (Sandbox Code Playgroud)
和这里:
((coffee1_temp >= 60.0) && (coffee1_temp <= 69.9) &&
(coffee_maker == 'r' || coffee_maker == 'R') || // <== here
((coffee1_temp >= 70.0) && (coffee_maker == 'c' || coffee_maker == 'C')))
Run Code Online (Sandbox Code Playgroud)