如何知道 fscanf 在文件中到达了新行 \n。我一直在使用我自己的函数来做到这一点。我知道我可以使用 fgets 然后 sscanf 来满足我所需的模式。但是我的要求并不稳定,有时我想得到 TAB 分隔的字符串,有时是换行分隔的字符串,有时是一些特殊字符分隔的字符串。因此,如果有任何方法可以了解 fscanf 的新行,请帮助我。否则也欢迎任何替代方式。
提前致谢。
fscanf(stream, "%42[^\n]", buffer);
是 fgets(buffer, 42, stream) 的等价物。你不能用 * 替换 42 来指定参数中的缓冲区长度(就像你在 printf 中所做的那样),它的意思是抑制赋值。所以
fscanf(stream, "%*[^\n]%*c");
读取(并包括)下一个行尾字符。
除了 [、c 和 n 之外的任何转换说明符都以跳过空格开头。
Kernighan 和 Pike 在优秀的《编程实践》一书中展示了如何使用sprintf()
来创建适当的格式说明符,包括长度(类似于 AProgrammer 回答中的示例),然后在对scanf()
. 这样,您还可以控制分隔符。对这种方法“效率低下”的担忧可能是错误的——替代方案更难正确。
也就是说,我通常不使用scanf()
文件 I/O 的函数族。我使用某种“获取行”例程将数据放入字符串中,然后使用sscanf()
函数族将其拆分 - 或其他更专业的解析代码。