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 34 5 int main() 6 7 { 8 9char ch , a[1024];1011int i , j , k , m, n;12131415printf("请输入一个英文句子:");1617for(i = m = 0 , j = n = 1 ; (ch = getchar()) != '\n' ;) {1819if(ch != ' ') {2021if(j == 1) m ++;2223a[i ++] = ch;2425a[i] = '\0';2627j ++;2829if(j > n) n = j;3031} else {3233if(j > 1) {// 只有字符串之间的单个空格有效3435j = 1;3637i ++; // 保护上个字符串末尾的 '\0'3839}4041}4243}4445char result[m][n];4647for(i = k = 0 ; i < m ; i ++) for(j = 0 ; (result[i][j ++] = a[k ++]) ;) ; // 这里绝不可以只是简单地按照每个字符串 n 个字符进行分割和复制4849printf("分割结果已存放到result[%d][%d]的二维数组中 。。。。。\n" , m , n) ;5051printf("现在依次打印每个单词:\n");5253for(k = 0 ; k < m ; k ++) printf("%s\n" , result[k]);5455 }上面代码中第47行,内循环的条件二是一个赋值语句:result[i][j++]=a[k++],当被如遇的值a[k]=’\0’的时候,会退出循环 。
【C语言下for循环的一点技巧总结】4)在上一个代码举例里,使用4次for循环,其中2次循环都没有使用条件三循环增量,所有的循环都是在其他部位进行计算过程中实现的变量增量 。

    经验总结扩展阅读