[英]how to stop reading from file in C
我只是想读取文件的每个字符并将其打印出来,但是当文件完成阅读时,但我得到了一堆? 完成阅读后。 我如何解决它?
#include <stdio.h>
int main(void){
FILE *fr; /* declare the file pointer */
fr = fopen ("some.txt", "r"); /* open the file for reading */
/* elapsed.dta is the name of the file */
/* "rt" means open the file for reading text */
char c;
while((c = getc(fr)) != NULL)
{
printf("%c", c);
}
fclose(fr); /* close the file prior to exiting the routine */
/*of main*/
return 0;
}
尽管它的名称, getc
返回一个int
,而不是一个char
,因此它可以表示所有可能的char值,此外还有EOF
(文件末尾)。 如果getc
返回了一个char
,那么在没有使用文件中可能存在的值之一的情况下,将无法指示文件的结尾。
因此,要修复代码,必须先更改声明char c;
到int c;
这样它可以在返回时保持EOF标记。 然后,您还必须更改while循环条件以检查EOF
而不是NULL
。
你也可以调用feof(fr)
来单独测试文件结尾来读取字符。 如果你这样做了,你可以把c
feof()
char
,但是你必须在读完字符之后但是在打印出来之前调用feof()
,并使用break
来摆脱循环。
如果不成功, fgetc()
将返回EOF。
int c;
while ((c = getc(fr)) != EOF)
{
printf("%c", c);
}
fgetc()
在文件结尾返回EOF
,而不是NULL
。
将“NULL”替换为“EOF”。
改变这个
char c;
while((c = getc(fr)) != NULL)
{
printf("%c", c);
}
至
char c;
int charAsInt;
while((charAsInt = getc(fr)) != EOF)
{
c = (char) charAsInt;
printf("%c", c);
}
换句话说:您需要与EOF
进行比较,而不是NULL
。 您还需要使用int
变量来从fgetc
接收返回值。 如果使用char
,则与EOF
的比较可能会失败,并且您将返回到开始的位置。
其他人已经解决了你所遇到的问题,而不是使用printf("%c", c);
使用putchar(c);
可能效率更高putchar(c);
。 当你要求printf
打印一个字符时,会涉及相当多的开销。
getc返回一个int 。
将char c更改为int c 。
getc也会返回EOF ,将针对NULL的测试更改为针对EOF的测试
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.