2

程序有什么问题?

#include<stdlib.h>
#include<stdio.h>
#include<fcntl.h>
main(   )
{
  char * buf="robot.c";
  char c;int i=0;   
  FILE*fp=fopen(buf,"r");
  if(!fp)
    printf("open error\n");
  while(1)
    {
      //printf("size%c\n",*fp->_IO_read_ptr);
      //while((c=getc(fp))>0)
      c=getc(fp);
      printf("%c",c);
      //getc(fp);
      //printf("new size%c\n",*fp->_IO_read_end);
      for(;i<1000000000;i++);
    }
}
4

1 回答 1

6

正如@Barmar 所注意到的,当找到 EOF 时,您不会检查并中断 while 循环,因此它会打印垃圾。

相反,写你的 while 像:

while((c=getc(fp))!=EOF){
      printf("%c",c);
      for(;i<1000000000;i++);
}

注意:c 必须是 int 才能保存 EOF 值。
一个很好的阅读:EOF的定义以及如何有效地使用它

于 2013-06-10T05:46:20.833 回答