C:计数 `new line` 直到达到双倍空格

标签 c scanf fgetc

基本上,我正在尝试从看起来像这样的文件中读取数据“ block ”

000000000
000000001
000100000
100000000

000000000
000000000
000000000  

上面的示例将转换为两个数据 block 。第一个是 4 行高,第二个是 3 行高。

双空格分隔“ block ”。

这是我的代码,直到遇到双空格为止。 (这会读取第一个循环,然后我使用 fseek 读取我想读取的任何其他 block - 不过在这个问题中这并不重要)

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

这在大多数情况下都可以正常工作 - 但在一些复杂且无法解释的情况下它不起作用。另外,它非常臃肿和困惑。

有没有一种更简洁、更好的方法来计算新行的数量,并在达到双新行时停止计数?

最佳答案

使用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);

关于C:计数 `new line` 直到达到双倍空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13548185/

相关文章:

c - 运行简单的字符串 C 程序时出现总线错误

c - 通过引用而不是值来获取数据

c - 内循环的终止条件与外循环相同

c - 使用scanf读取字符

c - 如何让 fgetc 在循环内打印文件的所有字符

c - fgetc,检查 EOF

c - printf() 函数如何处理使用全局缓冲区的函数返回的字符串?

c - 扫描句子中字母之间的数字

c - 使用 sscanf 读取带有空格和特殊字符的字符串