我试图弄清楚如何做到这一点,但我是C的新手,我想知道我的逻辑是否是解决这个问题的最有效方法。
我能想到的最简单的方法是:
-
阅读第一行
-
将行存储在缓冲区中1
-
阅读第二行
-
将第二行存储在缓冲区中2
-
如果缓冲区 1 != 缓冲区 2,则打印缓冲区 1 并擦除缓冲区 1。 将第 3 行存储在缓冲区 1 中。从步骤 4 重复。
-
如果缓冲区 1 = 缓冲区 2,则擦除缓冲区 1,将第 3 行存储在缓冲区 1 中,然后从步骤 4 重复。
如果文件包含:
ok ok
ok
ok
结果应该是:
ok ok
ok
只有一个缓冲区:
#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;
}
将
第 3 行存储在缓冲区 1 中
不是你想要的。根本不要存储它。顺便说一下,很难理解你在这里想做什么。如果您不想打印此示例的第 3 行,只需忽略打印它的步骤 5 部分