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