C编程For循环的一点见解

今天正在学一个字符串处理函数,用到许多 for 循环,其中,我写了两个 for 语句循环如下:

for(i=0;i++;i<max)
for(z=0;z++;buffer[i][j]!=':')

在这两个语句编译时,提示出错信息如下:翻译过来就是 警告:语句没有影响

warning: statement with no effect

很纳闷,语句不是对的吗,都是为什么会初小没有影响效果呢?上网搜一下,于是看到了 for 循环的原型,如下:

for (expr1; expr2; expr3) {
  statement
}

其中的 expr1 为条件的初始值。expr2 为判断的条件,通常都是用逻辑运算符号 (logical operators) 当判断的条件。expr3 为执行 statement 后要执行的部份,用来改变条件,供下次的循环判断,如加一..等等。而 statement 为符合条件的执行部分程序,若程序只有一行,可以省略大括号 {}。

原来错在,这三个 expr 的顺序不能乱,初始值在前,判定在中,改变变亮语句在后,而我的循环中,就是将这些颠倒了,从 i++ 与 z++ 中,总以为是循环先使用他们的值,再在当次循环结束的时候 +1 。判断可以随便放。与 for 循环原型不符。

于是我将循环改为如下,立即解决问题

for(i=0;i<max;i++)
for(z=0;buffer[i][j]!=':';z++)

记下这篇文章,是要让自己知道,for 循环的语句顺序一定不能变动,不然,即使你觉得是对的,可是写出来的程序,还是不能按照你的意思去处理。

{ 发表评论? }

  1. BoKeam

    沙发..

  2. 三叶草

    都被你抢光了》。。。

    对了jiechic,你的代码插件是什么啊~~推荐下~~

      • 三叶草

        哈哈,3Q!!赶紧去改改我的~

  3. christian louboutin shoes

    有点难,路过,支持下@

  4. 七七

    博主很用心,跟着学习了!

  5. kedeng美女博客

    最讨厌嵌套循环了,呵呵……

  6. 先看看

    看来你还是很善于解决问题

  7. 乐衣网

    分享了

  8. 卢松松

    你的见解我不解

  9. ubuntusoft

    额- -for的格式吧,,一定要按照它的顺序的
    比较习惯用for

  10. 高清电影

    什么都不懂,只是抱着学习的态度,随便看看而已~

  11. Code之行人

    呵呵,顺序错了,编译器救过不了了

  12. 黄江二手车

    来围观天书,好容易晕

  13. Also

    晕死。。。这。。很基本,,,真的。。

  14. 蓝天下

    我喜欢
    for(;;) { statement; if(**) break; }

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>