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

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

4

2 回答 2

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");
    }

    ..
}
于 2012-11-10T22:12:49.893 回答
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");
    }
...
}
于 2012-11-10T22:40:18.673 回答