如何读取文件 C,fscanf 结尾

How to read until end of file C, fscanf

我从文件中读取的内容:不同行的 P1/ s/ e/ t 等 /。在特定字母(如 'a')之后是一些我必须收集的数据,所以我不想使用 fgets。它没有结束 运行。请问你能帮帮我吗?

char com[21];
fscanf(src,"%s",com);
while(com!=EOF)
{
    if(com[0]=='a')
        fprintf(dest,"%s 1",com);
     if(com[0]=='s')
        fprintf(dest,"%s 2",com);
    fscanf(src,"%s",com);
}

简单的方法是测试 fscanf() 是否成功作为循环条件,并且在循环之前不需要 fscanf():

char com[21];

while(fscanf(src,"%20s",com) == 1)
{
    if(com[0]=='a')
        fprintf(dest,"%s 1",com);
     if(com[0]=='s')
        fprintf(dest,"%s 2",com);
}

fscanf() returns 成功扫描的项目数。所以,你不需要检查它是否返回 EOF.

请注意,我更改了格式字符串以避免缓冲区溢出。我建议您使用 fgets() 而不是 fscanf()(如果重要,请记住处理换行符)。

请注意 fscanf returns 和 integer 可以指示 EOF 到达文件末尾时。有关详细信息,请参阅手册页。

您的代码必须修改如下:

char com[21];
int ret;
ret = fscanf(src,"%s",com);
while(ret!=EOF)
{
    if(com[0]=='a')
        fprintf(dest,"%s 1",com);
     if(com[0]=='s')
        fprintf(dest,"%s 2",com);
    ret = fscanf(src,"%s",com);
}