C:不打印同一行就读取文件两次
我正试图找出如何做到这一点,但我是C语言的新手,我想知道我的逻辑是否是解决这个问题的最有效的方法 我能想到的最简单的方法是:C:不打印同一行就读取文件两次,c,file,io,getopt,C,File,Io,Getopt,我正试图找出如何做到这一点,但我是C语言的新手,我想知道我的逻辑是否是解决这个问题的最有效的方法 我能想到的最简单的方法是: 读第一行 将该行存储在缓冲区1中 读第二行 将第二行存储在缓冲区2中 如果缓冲区1!=buffer2、打印buffer1和擦除buffer1。将行3存储在缓冲区1中。重复步骤4 如果buffer1=buffer2,则擦除buffer1,将行3存储在buffer1中,然后从步骤4开始重复 如果文件包含: ok ok ok ok 结果应该是: ok ok ok 将行
ok ok
ok
ok
结果应该是:
ok ok
ok
将行3存储在缓冲区1中
不是你想要的。一点也不要储存。顺便说一句,很难理解你想在这里做什么。如果您不想打印本例的第3行,只需忽略步骤5部分,即只打印一个缓冲区:
#包括
内部主(空)
{
字符buff[100];
int-diff,ch;
未签名pos;
对于(pos=0,diff=1;;){
ch=getc(标准偏差);
如果(ch!=buff[pos]){
如果(!diff)用于(;diff=sizeof buff){;}//在这里处理溢出
如果(ch='\n'){diff=pos=0;}
}
返回0;
}
太棒了!现在:在实际代码中尝试一下(一旦它工作了,试着只使用一个缓冲区来完成…)有没有一个函数可以在C中逐行读取文件?我试过fgets和getLine,但都没用。
#include <stdio.h>
int main(void)
{
char buff[100];
int diff,ch;
unsigned pos;
for(pos=0,diff=1;;){
ch = getc(stdin);
if (ch != buff[pos] ) {
if (!diff) for ( ; diff < pos; diff++) putc(buff[diff], stdout);
diff=1;
}
if (ch == EOF)break;
if (diff) putc(ch,stdout);
buff[pos++] = ch;
if (pos >= sizeof buff) {;} //handle overflow here
if (ch == '\n') {diff = pos = 0; }
}
return 0;
}