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

时间:2014-10-28 04:08:39

标签: c file

我有以下代码。

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

在此我明白,当读取EOF时将设置feof标志。但它如何在文件中读取一个接一个的字符串? 我没有在循环中包含任何此类代码。它仍然会读取所有字符串直到文件中的结尾并写入fp3。 请解释

2 个答案:

答案 0 :(得分:2)

为EOF测试fscanf()的结果。

feof()表示{em>上一次 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()成功(或不成功)的确定性。

"它如何在文件中读取一个接一个的字符串? ..."只能猜到发布的代码有问题。 while( !feof(fp1) && !feof( fp2) { 至少缺少)。至于真正的代码OP有什么是猜测工作。

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

OP尚未显示name,usn的声明。很可能,其中任何一个都不足以进行数据读取,缓冲区溢出会导致未定义的行为。 @ash

答案 1 :(得分:0)

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

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