【问题标题】:Confused with "for loop" output [closed]与“for循环”输出混淆[关闭]
【发布时间】:2021-09-12 18:53:51
【问题描述】:

我有一个非常基本的 C 程序,但对它的输出感到困惑:

#include<stdio.h>

int main() {
        int i;
        char s[] = "K";

        for(i=0; s[i]; i++); {
                printf("%d ", i);
                printf("%c ", s[i]);
        }
}

它将 i 值输出为 1,但根据该线程的答案之一: Difference between pre-increment and post-increment in a loop?

    int i = 0; // Initialization

    loopStart:
    if (i < 5) // Condition
    {
       Output(i);

       i++ or ++i; // Increment

       goto loopStart;
     }

在Output(i)之后发生增量(相当于printf("%d ", i);),那么i的值怎么是1而不是0呢?

【问题讨论】:

标签: c linux for-loop


【解决方案1】:

因为;在for循环之后

for(i=0; s[i]; i++);

去掉分号就可以了。

for(i=0; s[i]; i++)

这是因为分号将被视为语句的结尾,而您的printf 不是循环的一部分,将在循环执行完成后执行。

【讨论】:

    【解决方案2】:

    当您在 for 循环的末尾添加分号时,在检查 for 循环中的条件后执行将终止。 如果你想要输出:0 和:K

    那就试试这个

    int main()
    {
         int i = 0;
         char s[] = 'K';
         for(i = 0; s[]; i++)
         {
              printf("%d", i);
              printf("%c",s[i]);
         }
         return 0;
    }
    

    【讨论】:

      【解决方案3】:

      你的代码块

      for(i=0; s[i]; i++); {
          printf("%d ", i);
          printf("%c ", s[i]);
      }
      

      有误导性的缩进。使用正确的缩进,它看起来像这样:

      for(i=0; s[i]; i++)
          ;
      
      {
          printf("%d ", i);
          printf("%c ", s[i]);
      }
      

      如您所见,for 循环是空的,带有printf 语句的代码块不是for 语句的一部分(这意味着它不是循环的一部分)。你想要的大概是这样的:

      for(i=0; s[i]; i++) {
          printf("%d ", i);
          printf("%c ", s[i]);
      }
      

      请注意,此代码与您的代码相同,只是删除了一个分号。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-16
        • 1970-01-01
        • 2021-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多