C語言下for循環的一點技巧總結
for循環是普遍應用與各種電腦語言的一種循環方式。
一般情況下,
for循環規則:for(條件一;條件二;條件三)
條件一為滿足條件,也就是條件一為1時,進入這個for循環。條件二為循環條件,也就是說當條件二不滿足時繼續循環。條件三為循環遞增條件,裡面羅列循環節遞增的方式。for循環在實際運行的時候是:首先判斷條件一是否為1,為1時進入循環內的下一步,為0跳過整個for循環。其次判斷條件二是否為1,為1時進入否循環下屬的({}包圍部分的內容)循環節,不論循環節語句是否存在,運行完畢後運行條件三,然後再次運行條件二,一直到條件二為0.
技巧:1)三個都可以省略,只要保證括弧()里有足夠兩個分號;就可以。省略默認條件是1,繼續執行。極端條件下的語句for(;;)等同於while(1),為無條件進入循環。
2)條件一,不但可以用於設定循環變數的初始值,也可以用於設定循環開始前的變數的初始值。比如:i=m=0,j=n=1作為條件一,這樣就為開始進入循環設定了4個變數,而其中的循環變數只是其中某一個,或者幾個。
3)條件二,是退出循環的條件。條件二正常情況下是一個判斷條件,當判斷結果為1,或者說符合要求時,繼續循環。今天在網友幫助下,認識到當條件二不是一個判斷,而是一個返回值的時候,如果返回值是0,同樣會退出循環。這樣就提供了某些情況下的特殊退出方法。
舉例:
1 #include<stdio.h> 2
3
4
5 int main() 6 7 { 8 9 char ch , a[1024] ; 10 11 int i , j , k , m , n ; 12 13 14 15 printf("請輸入一個英文句子:") ; 16 17 for(i = m = 0 , j = n = 1 ; (ch = getchar()) != '\n' ;) { 18 19 if(ch != ' ') { 20 21 if(j == 1) m ++ ; 22 23 a[i ++] = ch ; 24 25 a[i] = '\0' ; 26 27 j ++ ; 28 29 if(j > n) n = j ; 30 31 } else { 32 33 if(j > 1) { // 只有字元串之間的單個空格有效 34 35 j = 1 ; 36 37 i ++ ; // 保護上個字元串末尾的 '\0' 38 39 } 40 41 } 42 43 } 44 45 char result[m][n] ; 46 47 for(i = k = 0 ; i < m ; i ++) for(j = 0 ; (result[i][j ++] = a[k ++]) ;) ; // 這裡絕不可以只是簡單地按照每個字元串 n 個字元進行分割和複製 48 49 printf("分割結果已存放到result[%d][%d]的二維數組中。。。。。\n" , m , n) ; 50 51 printf("現在依次列印每個單詞:\n") ; 52 53 for(k = 0 ; k < m ; k ++) printf("%s\n" , result[k]) ; 54 55 }
上面程式碼中第47行,內循環的條件二是一個賦值語句:result[i][j++]=a[k++],當被如遇的值a[k]=』\0』的時候,會退出循環。
4)在上一個程式碼舉例里,使用4次for循環,其中2次循環都沒有使用條件三循環增量,所有的循環都是在其他部位進行計算過程中實現的變數增量。