0

基本的に、私は次のようなファイルからデータの「ブロック」を読み取ろうとしています。

000000000
000000001
000100000
100000000

000000000
000000000
000000000  

上記の例は、2ブロックのデータに変換されます。1つ目は4行の高さ、2つ目は3行の高さです。

ダブルスペースは「ブロック」を区切ります。

これが、ダブルスペースが発生するまで読み取るコードです。(これは最初のループを読み取り、次にfseek読み取りたい他のブロックを読み取るために使用します-この質問では実際には重要ではありません)

while(!endofblock){
  firstchar = fgetc(fptr); //read the first character
    if(firstchar == '\n'){ 
       if(fgetc(fptr) == '\n'){ //if its newline AND newline
          endofblock = 1; //end of block is reached, loops break
       }else{  //if its just one new line
          *h = *h + 1; //increment h (height), a pointer passed from elsewhere
       }
    }

  if(feof(fptr)){ 
    endofblock = 1; 
  }
}

これはほとんどの場合正常に機能しますが、機能しない複雑で説明のつかないケースがあります。さらに、それは非常に肥大化していて散らかっています。

数を数え、到達new lineしたときに数えるのをやめる、よりきちんとした、より良い方法はありますか?double new line

4

1 に答える 1

0

getline次の関数を使用します。

char *line = NULL;
size_t linecap = 0;
ssize_t linelen;

while ((linelen = getline(&line, &linecap, fp)) > 0) {
    if (line[0] == '\n') {
        // block ended
    }
}

free(line);
于 2012-11-25T04:51:52.550 に答える