如何检测是否有新行然后忽略它(fgets)

时间:2018-03-21 08:00:28

标签: c

#include <stdio.h>
#include <string.h>

int main(int argc, char **argv) {

    FILE *file = fopen(argv[1], "r");
    char buf[100];
    char *pos;
    while (fgets(buf, sizeof(buf), file)) {
        if ((pos=strchr(buf, '\n')) != NULL)
            *pos = '\0';
        printf("%s\n", buf);

    }

}

考虑我有一个如下文件

a

b

c

如何检测是否有新行并忽略它然后继续while循环。例如,

$ gcc -Wall above.c
$ ./a.out file
a
b
c

正如您所看到的,它忽略了新的行。

1 个答案:

答案 0 :(得分:0)

如果输入中有换行符,fgets()会停止并将其包含在缓冲区中。您不需要使用strchr()进行搜索,因为它始终位于strlen() - 1(如果存在)。同样,空行意味着位置0\n,在这种情况下您可以跳过它:

#include <stdio.h>
#include <string.h>

int main(int argc, char **argv) {
    FILE *file = fopen(argv[1], "r");
    char buf[100];
    size_t len;

    while (fgets(buf, sizeof(buf), file)) {
        if (buf[(len = strlen(buf)) - 1] == '\n')
            buf[len - 1] = 0;
        if (len > 1)
            printf("%s\n", buf);

    }

}