我想逐行阅读文本文件,但我对白线不感兴趣。跳过空白线有什么好方法?我知道我可以阅读一行,检查它是否为空白并且如果是空的则释放它,依此类推,直到我达到一个好的路线,但我想知道是否还有其他方法可以做到这一点。
答案 0 :(得分:2)
我认为你的方法已经足够好了。从技术上讲,你甚至应该检查它是否只是空格:-)请注意,如果你使用fscanf
(在家庭作业中很常用),白线跳过“包含在价格中”:-)你没有为了对抗“这条线比我的缓冲区大,我该怎么办?”
答案 1 :(得分:0)
一般概念很好......你逐行阅读并检查它是否有非空白字符。检查它的最佳方法是使用strspn ...例如:
#include <stdio.h>
#include <string.h>
int is_blank_line(const char *line) {
const char accept[]=" \t\r\n"; /* white space characters (fgets stores \n) */
return (strspn(line, accept) == strlen(line));
}
int main(int argc, char *argv[]) {
char line[256]; /* assuming no line is longer than 256 bytes */
FILE *fp;
if ( argc < 2 ) {
fprintf(stderr, "Need a file name\n");
return -1;
}
fp = fopen(argv[1], "r");
if ( !fp ) {
perror(argv[1]);
return -1;
}
while (!feof(fp)) {
fgets(line, sizeof(line), fp);
if (is_blank_line(line)) {
continue;
}
printf("%s", line);
}
return 0;
}
答案 2 :(得分:0)
如果逐行阅读,请使用'\ n'进行简单检查(即使您的真实操作系统换行符为\ r \ n,编译器也会注意)。 如果使用fread读取整个文件,则使用strtok或strtok_r使用sep ='\ n'分割行,空行将自动切断。