【发布时间】:2012-11-25 04:11:11
【问题描述】:
基本上,我正在尝试从看起来像这样的文件中读取数据“块”
000000000
000000001
000100000
100000000
000000000
000000000
000000000
上面的示例将转换为两个数据块。第一个是 4 行高,第二个是 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 时停止计数?
【问题讨论】:
-
逐行读取,然后拆分/解析读取的行 - 比逐字符读取要容易得多
-
@stackplasm no,通过使用
getline函数。 -
请记住,gnu readline 要求您在项目中使用 gpl。 IMO,readline 的主要优点是对提示有用的 emacs 编辑和历史记录,但是当它用于从文件中读取时,这并不重要。 fgets 没有任何问题。