[英]For loop confusion in c program
為什么循環從2運行到7?
int i;
for(i=1;i<=6;printf("\n%d\n",i))
i++;
這個的輸出是
2 3 4 5 6 7
但是i
限制是6。
for
循環的語法是
for (
clause-1;
expression-2;
expression-3)
語句
執行如下,引用C11
,章節§6.8.5.3,( 強調我的 )
表達式
expression-2
是在每次執行循環體之前計算的控制表達式。 在每次執行循環體之后,expression-3
被評估為void表達式。 [....]
這里, i++
是body, printf("\\n%d\\n",i)
是表達式-3 。
所以,執行的順序就像是
i = 1;
start loop
i < = 6 //==> TRUE
i++; //i == 2
printf // Will print 2 ///iteration 1 done
i < = 6 //==> TRUE
i++; //i == 3
printf // Will print 3 ///iteration 2 done
.
.
.
i < = 6 //==> TRUE
i++; //i == 6
printf // Will print 6 ///iteration 5 done
i < = 6 //==> TRUE
i++; //i == 7
printf // Will print 7 ///iteration 6 done
i < = 6 ==> FALSE
end loop.
像for
循環一樣
for(i=1;i<=6;printf("\n%d\n",i))
i++;
相當於
{
i = 1; // Initialization clause from for loop
while (i <= 6) // Condition clause from for loop
{
i++; // Body of for loop
printf("\n%d\n", i); // "Increment" clause from for loop
}
}
如您所見, printf
在變量i
遞增后完成,這當然意味着它將打印遞增的值( 2
到7
)。
循環的工作方式相當於現在顯而易見的
int i;
for (i = 1; i <= 6; /*intentionally blank*/){
i++;
printf("\n%d\n", i);
}
從概念上講, for
循環中的第3個表達式就在循環體的右大括號之前運行。
你以不尋常的方式編寫了for循環。
下面給出for循環的操作。
首先完成初始化。 i=1
然后檢查表達式i<=6
然后身體進行i++
然后執行增量。 在你的情況下這是printf("\\n%d\\n",i)
重復步驟2到4,直到步驟2為假。
在您的情況下,您可以看到printf
將首先針對i==7
完成,然后將檢查表達式i==7
。 之后,for循環將退出。 類似地,第一次打印僅在i
增加一次后完成
因此,首先打印為2
,最后打印為7
你已經錯誤地編寫了循環 - 你已經用增量代碼交換了循環體。 因此,在完成循環體中的i++
之后,它會將printf
作為增量進行處理,而這應該是另一種方式。
正確寫入for
循環如下。
int i;
for(i=1;i<=6;i++)
printf("\n%d\n",i)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.