c getline跳过空白行

时间:2012-11-10 21:58:06

标签: c line getline

while(getline (&line, &line_size, f) != -1){}  
  

我正在使用此功能读取线条。但我想知道我什么时候读空白。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

因为H2CO3已经提到过你可以使用行长:

while (getline (&line, &line_size, f) != -1) {

    if (strlen(line) == 1) {
        printf("H2CO3 spotted a blank line\n");
    }

    /* or alternatively */
    if ('\n' == line[0]) {
        printf("Ed Heal also spotted the blank line\n");
    }

    ..
}

答案 1 :(得分:0)

您需要定义空行。

另外,因为" getline函数从流中读取整行,直到并包括下一个换行符。"

我不认为

strlen(line) == 1

是可移植的,因为Win / DOS和Unix使用不同的EOL约定。此外,EOF可能在EOL角色完成之前发生。所以,你需要定义一个类似

的函数
int is_blank_line(char *line, int line_size)
{
   return line_size == 0 || is_eol(line)
}

其中is_eol是为您所在的平台定义的。这是你可以放入空格的地方,等等。

所以你得到类似的东西:

int is_eol(char *line)
{
...
     return result;
}
...
int is_blank_line(char *line, int line_size)
{
  return line_size == 0 || is_eol(line)
}
...
while (getline (&line, &line_size, f) != -1) {
    if (is_blank_line(line, line_size)) {
        printf("blank line spotted\n");
    }
...
}