簡體   English   中英

沒有花括號的“for”循環有什么作用?

[英]What does a 'for' loop without curly braces do?

沒有任何花括號的for循環有什么作用?

所以據我所知,在 if 語句中,只執行第一行代碼。 那么在 for 循環中它是如何工作的呢?

我真的不明白沒有大括號和有大括號的循環的概念。 我想用一段代碼來解釋會有所幫助。 順便說一句,這是在 C 中。 這是我一直在查看的代碼作為參考。

int main(int argc, char* argv[])
{
  int i;
  int count = 0;
  for (i = 0; i < 5; i++)
    count++;
    printf("The value of count is: %d\n", count);

  return 0;
}

在這種情況下,我看到沒有花括號,所以我假設它只會繼續迭代第一個語句直到 i < 5 並且一旦 i 不小於 5 它什么也不做,但是當我測試代碼我知道它最終也會打印 printf 語句。 我認為沒有花括號的循環只執行第一行代碼? 或者我在這里錯過了什么。

沒有花括號,只有循環定義之后的第一條語句被認為屬於循環體。

請注意,在您的示例中, printf僅被調用一次。 盡管它的縮進與前一行匹配,但這是一條紅鯡魚 - C 不在乎。 它對我說的是,編寫代碼的人可能忘記了大括號,並打算printf語句作為循環體的一部分。

唯一一次我會省略花括號是在編寫單行if語句時:

if (condition) statement;
do_something_else();

在這里,沒有縮進來引入關於第二行上的語句是否實際上應該屬於if的主體的歧義。 閱讀本文時,您可能會更加確信它按預期工作。

如果 for 循環沒有大括號,它將執行下一條語句。 語法本質上是

for (<initialization>;<condition>;<increment>) <statement>;

“聲明”部分可以是任何東西。 它可以是一個簡單的計數++; 或者它可能是一個 'if'/'if-else' 語句,它甚至可能是另一個沒有大括號的 for 循環!

所以在這種情況下,代碼類似於:

for (i = 0; i < 5; i++) {
    count++;
}
printf("The value of count is: %d\n", count);

這取決於for循環。 例如,這個執行一些“不帶花括號”的東西,打印(2 次) i(從 1 到 10):

#include <stdio.h>

int main(){
    for(int i=0; i<10;i++, printf("%d ", i), printf("%d\n", i));
    return 0;
}

對於唯一的循環:

for(int i=0; i<10;i++, printf("%d ", i), printf("%d\n", i));

(我做了兩次以表明第二次也被執行)。

輸出:

1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10

我想補充一點,我遇到了一些濫用它來執行嵌套 for 循環的代碼。

for(int i=0; i<10; i++)
for(int j=0; j<10; j++)
for(int k=0; k<10; k++)
  doSomething(i, j, k);

在這種情況下,每個 for 循環后面只有一個語句(以下 for 循環或函數),因此不需要大括號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM