【问题标题】:why the result is not expected?为什么结果不是预期的?
【发布时间】:2012-11-20 11:57:32
【问题描述】:

我有一些代码如下:

#include <stdio.h>
#include <stdlib.h>

static counter = 0;
static flag = 0;

int main()
{
    int number = 3;
    int i = 0;
    for(i; i< number; i++)
    {
        if(counter >= number)
        {
            counter = 0;
            flag = 1;
        }
        counter ++;

        printf("   counter = %u\n", counter);
        printf("   flag = %u\n", flag);

    }



    return 0;
}

每次计数器达到3时,标志应该是1,但是为什么计数器达到3时,标志仍然是0?

【问题讨论】:

  • 因为根据代码,i 永远不会到达 3。试试i &lt;= number
  • 如果我只想循环3次,循环到第三次,设置flag为1?
  • 然后你可以把counter++放在for旁边。我的意思是在if 之前

标签: c loops


【解决方案1】:

你的循环只运行了 3 次。在最后一次迭代中,if 测试期间,counter 的值为 2,number 的值为 3。并且 if 测试失败。现在计数器递增到 3,这就是打印的内容。

【讨论】:

    【解决方案2】:

    你没有到达if-section

    当 i = 3 时,您的计数器 = 2 并从循环中消失。

    【讨论】:

      【解决方案3】:

      因为if 中的代码永远不会执行,因为当i 变为3 时,for 中的条件会失败。

      【讨论】:

        【解决方案4】:

        你在你的条件之后增加counter,所以如果你确定counter &gt;= number它最大为2。

        【讨论】:

        • if(counter &gt;= number)之前的那一行尝试counter++
        【解决方案5】:

        因为下面的代码永远不会到达并且程序退出了循环

        if(counter >= number)
                {
                    counter = 0;
                    flag = 1;
                }
        

        所以counter=3flag 将保持0

        如果你想在循环结束时将其设置为0,那么就这样做

        if 语句上方的counter++ 并删除另一个counter++(if 下方)

        【讨论】:

          猜你喜欢
          • 2012-11-28
          • 2015-09-14
          • 2020-04-07
          • 2021-03-16
          • 1970-01-01
          • 2018-02-05
          • 1970-01-01
          • 2023-03-14
          • 1970-01-01
          相关资源
          最近更新 更多