C 文件I/O问题-while循环冲突
我在显示文本文件中的所有内容时遇到问题。此时,第一个while循环成功运行,它检查文件的长度(字符),以及是否与参数匹配。我已经完成了这个循环,但是在检查输入是否与文件长度匹配后,对于我的第二个循环,现在我想完全显示文本文件。但是,它只显示文件的2/3行。第一行看起来像是被第一个循环“占用”的 有人知道这是为什么吗C 文件I/O问题-while循环冲突,c,io,while-loop,file-get-contents,C,Io,While Loop,File Get Contents,我在显示文本文件中的所有内容时遇到问题。此时,第一个while循环成功运行,它检查文件的长度(字符),以及是否与参数匹配。我已经完成了这个循环,但是在检查输入是否与文件长度匹配后,对于我的第二个循环,现在我想完全显示文本文件。但是,它只显示文件的2/3行。第一行看起来像是被第一个循环“占用”的 有人知道这是为什么吗 我已经尝试将第二个循环放在第一位,它可以工作(显示文件的完整内容)。当第一个循环从文件读取时,它会提前读取偏移量。毕竟,你希望这一切都能奏效,对吧 while (fgets(
我已经尝试将第二个循环放在第一位,它可以工作(显示文件的完整内容)。当第一个循环从文件读取时,它会提前读取偏移量。毕竟,你希望这一切都能奏效,对吧
while (fgets(line, sizeof line, f)) {
int len = strlen(line);
if (length!=len-1){
fputs("max errorz\n", stderr);
exit(1);
}
break;
}
while ((c = getc(f)) != EOF) {
putchar(c);
}
因此,在fgets
之后调用getc
的行为与此相同-它从您停止的地方读取
只需在循环之间再次回到开始:
fgets(line1, sizeof line1, f);
fgets(line2, sizeof line2, f);
/* line1 and line2 now hold the first two lines */
或者像pzaenger建议的那样
fseek(stream, 0L, SEEK_SET);
在文件*f上调用
fgets
时,f在文件中的位置向前移动,因此后续调用将不会读取相同的数据。当你使用“代码> GETC< /代码> F点时,第一个循环就在文件的中间。您希望将f
放回文件的开头。尝试@pzaenger建议的倒带(f)。从文件中提取一些数据后,文件指针从起始位置向前移动一些位置。如果要将文件指针设置回文件的起始位置,则需要使用倒带()
1-您无需阅读文件的整个长度。阅读文档: 2-为什么在没有if-around的情况下将中断放入while命令?这意味着你的休息时间总是被击中,所以这意味着你不需要休息。查看与前面相同的链接 3-您只打印文件的一部分,因为您已经使用了,而您必须倒带您的指针,其他人建议的文件的一部分。再看 也许这有帮助:在第二个循环之前使用,将文件内部的位置设置回开头。
rewind(f);
while (fgets(line, sizeof line, f)) {
int len = strlen(line);
if (length!=len-1){
fputs("max errorz\n", stderr);
exit(1);
}
break;
}
rewind(f); // fix
while ((c = getc(f)) != EOF) {
putchar(c);
}