如何在linux中删除带有c的txt文件中的空行 - whitout Bash

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (93)

我尝试创建一个.c程序,当它运行时,它需要一个文件,它只打印有一些东西的行(空格,一个字母,一个数字......等)而不是空白行。

我需要在使用ubuntu的虚拟机上运行它(它正在运行最新版本的ubuntu)。到目前为止,我只是设法打印它的内容,但不是像在文件中一样。

代码:

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char **argv)
 {
    char *name = argv[1];

    FILE *f = fopen(name, "r");

    char x;

    while(fscanf(f, "%c" , &x) > 0)
    {
            printf("%c", x);
            if(x == '\n')
            {
                    printf("\n");
            }
    }
}

文件内容:

           as
           d

           3

结果:

           asd3

期望的结果:

           as
           d
           3
提问于
用户回答回答于

首先,您没有错误检查。这使您的程序难以使用。

其次,无条件地输出每个字符,然后输出换行符一个额外的时间。你想要做的是输出每个字符一次,除非它是换行符之后的换行符(因为它会创建一个空行),在这种情况下你不想输出它。

这是修复的代码:

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char **argv)
 {
    if (argc < 2)
    {
         fprintf (stderr, "An argument is required\n");
         return -1;
    }

    char *name = argv[1];

    FILE *f = fopen(name, "r");
    if (f == NULL)
    {
        fprintf (stderr, "Unable to open file for reading\n");
        return -1;
    }

    char x, px = '\n';

    while(fscanf(f, "%c" , &x) > 0)
    {
            // don't output a newline after a newline
            if ((x != '\n') || (px != '\n'))
                printf("%c", x);

            // keep track of what character was before the next one
            px = x;
    }
}

如果它非空,那么只读取每一行然后输出该行真的会容易得多。

扫码关注云+社区

领取腾讯云代金券