【问题标题】:for Repetition Statement in c [duplicate]c中的重复声明[重复]
【发布时间】:2016-10-22 08:34:59
【问题描述】:

for 语句执行时,计数器变量的值必须加一,因为我使用的是预自增运算符。

#include <stdio.h>
int main (void)
{
    unsigned int counter ;
    for ( counter = 1; counter <= 10; ++counter /*here is problem*/) {
        printf( "%u\n", counter );
    }
}

问题-

程序执行时,counter变量的值最初是1而不是2。

【问题讨论】:

  • 无论您是预增量还是后增量,这里都没有区别。直到第一个循环结束时才会发生。由于没有副作用,++countercounter++ 相同。
  • for ( counter = 1; counter++ &lt;= 10;)
  • 为什么你认为应该是2?
  • 每次循环迭代之后执行增量代码。即,printf之后。由于您没有使用自增表达式的结果,因此使用前自增运算符或后自增运算符没有区别。这只影响表达式的值,例如x = ++counter;x = counter++;
  • 为什么这个 C 问题被标记为 Java 问题的重复?

标签: c for-loop counter increment pre-increment


【解决方案1】:

如果你想让count从2开始,你应该在for循环中初始化count为

for ( counter = 2; counter <= 10; counter++) {
    printf( "%u\n", counter );
}

C 遵循以下for loops 的语法:

for ( init; condition; increment ) {
   statement(s);
}

这里的 init 部分是您进行初始化的地方。

【讨论】:

    【解决方案2】:

    当for语句被执行时

    第一次没有检查 for 循环的第三条语句,你使用了一个增量运算符或赋予 for 循环的条件,但是

    当循环开始迭代时,如果您在 for 循环的第三个语句中使用任何递增或递减运算符,那么它会起作用,如果您在 for 循环的第三个语句中使用任何条件,那么您的程序将永远不会结束,从而导致无限循环。

    【讨论】:

      【解决方案3】:

      for 循环中

      for(first statement; second statement; third statement){//...}; 
      

      通常用于更新的第三条语句在每次迭代结束时执行,因此您的变量counter 在第一次迭代期间将是1,并在以下位置变为2第一次迭代结束。


      如果您想让 counter 变量在迭代开始时递增,请尝试在 for 循环的第二个语句中使用它 ++counter

      for ( counter = 1; ++counter <= 10;)
      

      原因:

      因为,for 循环是一个预测试循环和条件,通常是在每次迭代开始时检查第二条语句。所以现在你的counter 在每次迭代开始时递增

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-05
        • 2013-12-08
        • 1970-01-01
        • 2014-02-06
        • 2017-08-10
        • 2011-05-15
        • 1970-01-01
        相关资源
        最近更新 更多