-1

我正在阅读的书(C How to Program with an into to C++ Global Edition,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) 

这是真的,否则不应该执行,给出的输出

***** 

并不是

*****
$$$$$

所以我的问题是为什么这条线

$$$$$

在输出中?

4

2 回答 2

4

你写了这个(相当于你的)

if (x < 10) { 
   if (y > 10) {  
      puts("*****");
   }else{
      puts("#####");
   }
}
puts("$$$$$");

它遵循你所说的。else与最接近的匹配项if。在这里y>10。当我们不使用括号时,and 总是考虑单个语句ifelse这里if-else外部的块if用于单个语句的目的。同样的方式为else单人puts("####")服务的目的。puts无论 and 的值是什么,最后一个都将x被执行y

于 2018-01-05T16:11:19.103 回答
4

[评论太长了]

即使没有大括号,如果缩进和换行正确(可以自动化,顺便说一句),也很清楚会发生什么:

int main() {
  int x = 9, y = 11;

  if (x < 10) 
    if (y > 10)
      puts("*****");
    else
      puts("#####");

  puts("$$$$$");
}
于 2018-01-05T16:31:11.007 回答