棘手的循环

时间:2012-08-07 14:44:51

标签: c for-loop infinite-loop

我对C语言中的for循环问题感到困扰。

我写的时候:

#include<conio.h>
#include<stdio.h>
main()
{
    int i = 0;
    for( ; i ; )
    {
        printf("In for Loop");
    }
    getch();
}

输出:没有打印。

执行代码,但由于条件而无法打印printf语句。好的,这里没问题。

但是当我写这段代码时:

#include<conio.h>
#include<stdio.h>
main()
{
    for( ; 0 ; )
    {
        printf("In for Loop");
    }
    getch();
}

输出:In for循环。

我的for循环执行了一次,但实际上它不能被执行。我不知道为什么? stackoverflow的编码器/程序员/黑客可以帮助我。请解释一下,为什么我的for循环只给出一次这个输出。

3 个答案:

答案 0 :(得分:12)

你写的内容不应该打印任何内容,但我怀疑导致问题的实际二次代码(不是你输入的内容)是:

for( ; 0 ; );     // <==== note the trailing semicolon there.
{
    printf("In for Loop");
}

在这种情况下,for循环不执行空语句,然后{ }代码执行一次。

编辑:如果这不是问题,请将一个完整的程序直接粘贴到您的问题中。

EDIT2:

以下最小的可编辑示例不会打印任何内容:

#include <cstdio>

int main()
{
    for( ; 0 ; )
    {
        std::printf("In for Loop");
    }
}

答案 1 :(得分:1)

两种方式都不应该输出任何东西。

答案 2 :(得分:0)

我无法在我的机器上复制此行为,使用gcc进行编译。这两个计划是:

#include <iostream>
int main()
{
  for( ; 0 ; )
  {
    std::cout << "Here I am!";
  }
  std::cout << "End of the program.";
}

输出

End of Program

一样
#include <iostream>
int main()
{
  int i = 0;
  for( ; i ; )
  {
    std::cout << "Here I am!";
  }
  std::cout << "End of Program";
}

这是我们期望发生的事情,因为0读取循环连续条件被评估为false,因此永远不会输入循环。