2016-09-19 88 views
3

我不代替,为什么我不需要括号在这种情况下为什么我不需要括号for循环和if语句

for (int i = 0; i < 10; i++) 
    if (num[i] < min) 
     min = num[i]; 

为什么我需要括号在这种情况下

int num[10], min; 
for (int i = 0; i < 10; i++) { 
     cout << "enter 10 numbers" << endl; 
     cin >> num[i]; 
} 
+12

更好的让你保持它们。没有的语法只是容易出错。 –

+1

语法允许。 – Jarod42

回答

8

因为你不知道。

它们是可选的。那就是这样。

如果您不使用大括号将多个语句分组到一个语句,那么只有forif前导码之后的第一个语句被视为该构造的一部分。 (但是这个规则是传递的,所以你的任务是你if是你for的一部分一部分!)

需要注意的是压痕没有效果这是非常重要的。

很多人认为[引用需求]你应该总是使用大括号,为清晰起见。

+1

其他人认为混淆可能很有趣;-) http://www.ioccc.org/ –

12

forif都必须跟一个“语句”。 A“声明”可以是一个简单的语句,像min = num[i];,更复杂的一个像if (num[i] < min) min = num[i];,也可以是一个复合语句(即零或大括号括起来更简单语句),像{ std::cout << "enter 10 numbers\n"; std::cin >> num[i]; }

有人认为,使用语法冗余大括号混淆简单的语句是很好的风格。其他人没有。

2

一个for循环的语法是

for (init, condition, post) statement; 

现在这意味着for(...)之后的任何一个语句将是身体和会是什么跑了循环。

然后我们有if语句其中有

if(condition) statement; 

语法所以我们可以看到,如果整个

if (num[i] < min) 
    min = num[i]; 

只是一个单一的声明,是所有你需要的对循环。

我们使用的原因{}当我们在一个循环或条件多于一行是让我们使用多语句循环/作为整个街区的条件被视为一个单独的语句。

0

如反应所示,不建议不带大括号。

for (int i = 0; i < 10; i++) /*For-loop only has one executable 
           *statement in its scope, the if-statement, 
           *so doesn't need braces.*/ 
    if (num[i] < min) /*If-statement contains only one executable 
         *statement its scope, so doesn't need braces*/ 
     min = num[i]; //One line of code to execute. 

棒与支架,它会让你的生活更轻松。

+0

谢谢,纠正。 – NonCreature0714

1
  1. 在FOR循环的情况下:您不必使用大括号,但根据我的知识,您应该。首先它增加了代码的可读性,它可以节省你对代码的无用调试。对于将来的读者,Oracle的代码约定清楚地表明你应该总是使用大括号。

  2. 在IF语句的情况下:对于单个语句,您不必使用大括号,但是如果您想在IF块中分组多个语句,则必须使用大括号。

我希望我的意见对你有用。

1

亮度轨道上的比赛总结得很完美 - 这只是一个很好的练习。很多程序员可能不会以那种懒惰的方式使用括号(毕竟它是可选的)。

如果您想要易于阅读的代码,甚至更重要的是易于调试,那么您应该养成在EVERY for循环和if语句之后使用括号的习惯。

一段时间后它可能会变得乏味,但就像我说的 - 这只是一个很好的做法。

0

好吧。没有支架的循环会很容易搞砸,特别是当程序员感到厌倦时。

但编译器可以理解它。

示例1:以;结尾且紧跟在for语句后面的完整行属于for语句的范围。但后面的路线不会。试着编译并运行它。

#include <iostream> 
int main(void){ 
    for (int i = 0; i < 10; i++) 
     std::cout << "in scope of for" << std::endl; 
    std::cout << "out of scope of for" << std::endl; 
} 

例2:同为if声明

#include <iostream> 
int main(void){ 
    if (1 == 1) 
     std::cout << "in scope of if" << std::endl; 
    std::cout << "out of scope of if" << std::endl; 
} 

例3:

#include <iostream> 
int main(void){ 
    int num[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 
    int min = num[0]; 
    for (int i = 0; i < 10; i++) 
      if (num[i] < min) //this if belong to the for above 
       min = num[i]; //this line belong to `if` above 
           //so this line also belong to the `for` 
           //as the `for` own the `if` 
} 
+0

'iosteram'?说说累了!这是C++;在空参数列表中不需要'void'。 –

+0

已修复。谢谢。 。 – rxu

1

我们基本上是用支架保持代码干净,就像我知道的编码,编译器不是很聪明,所以如果你在循环或if条件中有多个语句,那么我们使用括号(花括号{})来让编译器知道大括号中的每个语句是循环的一部分或if语句的一部分。

+1

编译器非常聪明,但它无法读懂你的想法。 –