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 に異なる規則を使用するため、移植可能です。また、EOL 文字が完了する前に EOF が発生する場合もあります。本当に、おそらく次のような関数を定義する必要があります

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 に答える