C:读取文件而不打印同一行两次



我试图弄清楚如何做到这一点,但我是C的新手,我想知道我的逻辑是否是解决这个问题的最有效方法。

我能想到的最简单的方法是:

  1. 阅读第一行

  2. 将行存储在缓冲区中1

  3. 阅读第二行

  4. 将第二行存储在缓冲区中2

  5. 如果缓冲区 1 != 缓冲区 2,则打印缓冲区 1 并擦除缓冲区 1。 将第 3 行存储在缓冲区 1 中。从步骤 4 重复。

  6. 如果缓冲区 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 部分

最新更新