繁体   English   中英

如何在feof()中增加while循环以在C中读取

[英]how while loop is incremented in feof( ) to read in C

我有以下代码。

 while( !feof(fp1) && !feof( fp2)
 {
    fscanf(fp1, "%s", name);
    fscanf( fp2, "%s", usn);
    fprintf(fp3, "%s%s\n", name, usn);
 }

在这种情况下,我理解读取EOF时将设置feof标志。 但是,它如何在文件中依次读取字符串? 我没有在循环中包含任何此类代码。 它仍然读取两个文件中的所有字符串,直到结尾,然后写入fp3。 请解释

测试fscanf()的EOF结果。

feof()表示在先前的 IO操作中发生了EOF

 while ((fscanf(fp1, "%s", name) != EOF) && (fscanf( fp2, "%s", usn) != EOF)) {
   fprintf(fp3, "%s%s\n", name, usn);
}

详情:

“读取EOF时将设置feof标志”误导。 EOF不是读取的内容。 尝试输入时会发生这种情况,但是由于没有更多数据可能导致失败。 在C语言中,代码在尝试读取输入的下一个char之前不知道它是否可用。 代码需要尝试读取并失败-然后设置EOF条件。

fscanf(fp1, "%s", name); 不检查fscanf()的返回值。 这是危险的,因为不能保证代码不会将任何内容读入name 通过检查返回值来获得scanf()成功(或scanf()确定性。

“只能在发布的代码有问题的情况下才能猜测”“它如何在文件中依次读取字符串?...”。 while( !feof(fp1) && !feof( fp2) { 至少缺少a ) 至于OP真正的代码是什么,那就是猜测。

假设while( !feof(fp1) && !feof( fp2)) { ,该代码循环循环从每个文件中重复读取一串非空白字符。 它在上一次读取时经常持续运行一次fp1和/或fp2达到其EOF条件,因此最后一个printf()可能包含先前读取的name和/或usn的重复。

OP没有显示name,usn声明name,usn 完全有可能,这两个都不足以读取数据并且缓冲区溢出,从而导致不确定的行为。 @灰

关闭括号.. while( !feof(fp1) && !feof( fp2) )

而且,您没有包含任何代码来从文件中读取字符串并写入另一个文件中? 但是我可以看到fscanf()fprintf()

暂无
暂无

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

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