#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
正如您所看到的,它忽略了新的行。
答案 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);
}
}