我正在阅读的书(C如何编写进入C ++全球版,Deitel& Dietel,2016)给出了以下代码:请注意,这是本书在练习部分中呈现代码的方式,故意没有括号和缩进。我会假设教你使用正确的缩进使阅读代码变得更容易。
int main(){
int x = 9, y = 11;
if (x < 10)
if (y > 10)
puts("*****");
else
puts("#####");
puts("$$$$$");
}
输出
*****
$$$$$
本书指出编译器总是将else与之前的if相关联,除非告知通过括号的位置做其他事情,所以通过该逻辑将else与
相关联if (y > 10)
这是真的,而else不应该执行,给出
的输出*****
而不是
*****
$$$$$
所以我的问题是为什么行
$$$$$
输出中
答案 0 :(得分:4)
你写的(相当于你的)
if (x < 10) {
if (y > 10) {
puts("*****");
}else{
puts("#####");
}
}
puts("$$$$$");
它跟随你所说的。 else
与最近的if
匹配。这里y>10
。当我们不使用括号时,if
和else
始终会考虑单个陈述。外部if-else
内的if
块用于单个语句的目的。 else
单puts("####")
用于此目的的方式相同。无论puts
和x
的值是多少,都会执行最后一次y
。
答案 1 :(得分:4)
[评论太久了]
即使没有大括号,也很清楚如果正确缩进和换行(can be automated,BTW)会发生什么:
int main() {
int x = 9, y = 11;
if (x < 10)
if (y > 10)
puts("*****");
else
puts("#####");
puts("$$$$$");
}