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

实施者

我有以下代码。

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

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

chux-恢复莫妮卡

测试fscanf()EOF的结果

feof()表示EOF发生在先前的IO操作上。

 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()这是危险的,因为不能保证代码不会被任何内容读入namescanf()通过检查返回值来获得成功(或不成功)的确定性

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

如何在C#中的for循环中增加i

来自分类Dev

如何在 C++ 中的 do while 循环中读取空格

来自分类Dev

如何在while循环中将数据读取器中的值传递给C#中的方法

来自分类Dev

C中的while循环-读取前哨变量

来自分类Dev

如何在for循环中从数据帧中读取单元格,其中框架名称随循环而增加

来自分类Dev

如何在python中退出while循环?

来自分类Dev

如何在Gforth中编写while()循环

来自分类Dev

如何在Java中限制while循环?

来自分类Dev

如何在 Scratch 中模拟 While 循环?

来自分类Dev

如何在批处理脚本中增加循环变量?

来自分类Dev

如何在Firefox中增加Ctrl + tab循环堆栈

来自分类Dev

如何在Ruby中循环的每次迭代中读取数字?

来自分类Dev

在while循环中读取C中的整数后,scanf被跳过

来自分类Dev

C ++中的整数和while循环...如何?

来自分类Dev

C中的While循环

来自分类Dev

在SQL Server中,如何在select中创建while循环

来自分类Dev

如何在MATLAB中的for循环中读取多个图像?

来自分类Dev

如何在读取文件时打破Scala中的循环?

来自分类Dev

如何在C中读取输入

来自分类Dev

如何在C中从.txt读取

来自分类Dev

如何在C ++中从串行设备读取

来自分类Dev

如何在C#中逐行读取?

来自分类Dev

如何在Python中执行循环时减少和增加循环范围“ i”变量

来自分类Dev

如何通过for循环在java中增加BigDecimal?

来自分类Dev

如何使用for循环增加jquery中的id?

来自分类Dev

如何在C ++中执行另一个while循环期间获取流输入

来自分类Dev

如何在C中编写具有多个条件的while循环

来自分类Dev

如何在C中循环if语句

Related 相关文章

热门标签

归档