首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在linux中使用c从txt文件中删除空行- whitout Bash

如何在linux中使用c从txt文件中删除空行- whitout Bash
EN

Stack Overflow用户
提问于 2019-06-03 06:31:26
回答 2查看 800关注 0票数 0

我尝试创建一个.c程序,当它运行时,它接受一个文件,并且只打印上面有东西的行(空格、字母、number....etc),而不打印空行。

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

代码:

代码语言:javascript
复制
#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");
            }
    }
}

文件内容:

代码语言:javascript
复制
           as
           d

           3

结果:

代码语言:javascript
复制
           asd3

期望的结果:

代码语言:javascript
复制
           as
           d
           3
EN

回答 2

Stack Overflow用户

发布于 2019-06-03 06:47:30

首先,你没有错误检查。这使得你的程序很难使用。

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

下面是修复后的代码:

代码语言:javascript
复制
#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;
    }
}

如果只读入每一行,如果该行不为空,则输出该行,这真的会容易得多。

票数 0
EN

Stack Overflow用户

发布于 2019-06-03 17:14:13

您可以使用fgets()函数获取包括换行符(\n)在内的整个行,在读取该行之后,如果第一个字符(行)是换行符,则可以跳过打印此行。

以下是执行此操作的代码段,您需要按照@David Schwartz所做的那样对argc和文件是否存在进行错误检查

代码语言:javascript
复制
    char line[200];
    while (fgets(line, 100, fp))
    {
        if (line[0] != '\n')
        printf(line);
    }

这应该是可行的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56419404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档