while(getline (&line, &line_size, f) != -1){}
我正在使用此功能来读取行线。但我想知道我什么时候读空行。有人可以帮忙吗?
因此正如 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");
}
..
}
您需要定义空行。
此外,因为“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");
}
...
}