C 文件I/O问题-while循环冲突

C 文件I/O问题-while循环冲突,c,io,while-loop,file-get-contents,C,Io,While Loop,File Get Contents,我在显示文本文件中的所有内容时遇到问题。此时,第一个while循环成功运行,它检查文件的长度(字符),以及是否与参数匹配。我已经完成了这个循环,但是在检查输入是否与文件长度匹配后,对于我的第二个循环,现在我想完全显示文本文件。但是,它只显示文件的2/3行。第一行看起来像是被第一个循环“占用”的 有人知道这是为什么吗 我已经尝试将第二个循环放在第一位,它可以工作(显示文件的完整内容)。当第一个循环从文件读取时,它会提前读取偏移量。毕竟,你希望这一切都能奏效,对吧 while (fgets(

我在显示文本文件中的所有内容时遇到问题。此时,第一个while循环成功运行,它检查文件的长度(字符),以及是否与参数匹配。我已经完成了这个循环,但是在检查输入是否与文件长度匹配后,对于我的第二个循环,现在我想完全显示文本文件。但是,它只显示文件的2/3行。第一行看起来像是被第一个循环“占用”的

有人知道这是为什么吗


我已经尝试将第二个循环放在第一位,它可以工作(显示文件的完整内容)。

当第一个循环从文件读取时,它会提前读取偏移量。毕竟,你希望这一切都能奏效,对吧

    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);
 }