【问题标题】:C: reading a file without printing the same line twiceC:读取文件而不打印同一行两次
【发布时间】:2019-09-07 13:37:12
【问题描述】:

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

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

  1. 阅读第一行

  2. 将行存储在缓冲区1

  3. 阅读第二行

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

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

  6. 如果 buffer1 = buffer2,则擦除 buffer1,将第 3 行存储在缓冲区 1 中,然后从第 4 步开始重复。

如果文件包含:

ok ok

ok

ok

结果应该是:

ok ok

ok

【问题讨论】:

  • 太棒了!现在:在实际代码中尝试一下。(并且,一旦它工作,尝试只使用一个缓冲区......)
  • C 中有没有逐行读取文件的函数?我尝试了 fgets 和 getLine 但这些都不起作用。

标签: c file io getopt


【解决方案1】:

只有一个缓冲区:


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

【讨论】:

    【解决方案2】:

    将第 3 行存储在缓冲区 1 中

    不是你想要的。根本不要存储它。顺便说一句,很难理解你在这里想要做什么。如果您不想打印此示例的第 3 行,只需忽略打印它的步骤 5 部分

    【讨论】:

      猜你喜欢
      • 2018-02-06
      • 2022-07-11
      • 2022-07-11
      • 2012-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-11
      相关资源
      最近更新 更多