繁体   English   中英

如何停止从C中的文件读取

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM