2016-09-19 92 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

編譯器非常聰明,但它無法讀懂你的想法。 –