繁体   English   中英

如何读取直到文件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()返回成功扫描的项目数。 因此,您无需检查它是否返回EOF

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

请注意, fscanf返回一个integer ,当到达文件末尾时,该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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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