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++);
}

注: EOF 値を保持するには、int でc なければなりません。
非常に良い読み物:EOFの定義とそれを効果的に使用する方法

于 2013-06-10T05:46:20.833 に答える