以下循环运行无限时间。为什么?

时间:2015-11-10 10:14:02

标签: c file infinite

while(0==0)

 {
      ch = getc(f);

      while(ch != '\n')
      {
           i++;
           ch = getc(f);
           printf("hi ");
      }

      if(ch == EOF)
      break;
 }

此循环运行无限次打印hi。该文件如下所示: -

1 3 8 2 4

2 3 3

3

4 个答案:

答案 0 :(得分:1)

您可以将输入视为:

while((ch = getc(f)) != EOF)

while(scanf(" %c ",&c) != EOF)

而非无限while(0==0)

并删除break条件。

答案 1 :(得分:0)

你确定文件末尾有EOL('\ n')吗?否则你的while(ch!='\ n')没有理由在读完最后一行后停止。

答案 2 :(得分:0)

0总是等于0.这是你无限的韵母。请改用:

 {while(scanf(" %c ",&c) != EOF)"}

答案 3 :(得分:0)

while(0==0)

这是一个非常奇怪的符号,请执行此操作:

while(1)

要找出你的循环永不停止的原因(你是正确的),让我们观察可能的情况

  1. 您的getc(f)会检索不是/n而非EOF的所有字符。继续进行第二个while循环。

  2. 您的getc(f)检索/n。重新启动第一个while循环。 (因为ch不是EOF

  3. 您的getc(f)检索EOF。继续进行第二个while循环。

  4. 在第二个while循环中:

    1. getc(f)检索/n。重新启动第一个while循环(ch不是EOF

    2. getc(f)检索除/nEOF之外的任何字符。重新启动第二个while循环。

    3. getc(f)检索EOF。重新启动第二个while循环。

    4. 您可以看到,在无可能的情况下,外部while循环可能会中断。