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 1314 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次循环都没有使用条件三循环增量,所有的循环都是在其他部位进行计算过程中实现的变量增量。