1

如何知道 fscanf 在文件中到达了新行 \n。我一直在使用我自己的函数来做到这一点。我知道我可以使用 fgets 然后 sscanf 来满足我所需的模式。但是我的要求并不稳定,有时我想得到 TAB 分隔的字符串,有时是换行分隔的字符串,有时是一些特殊字符分隔的字符串。因此,如果有任何方法可以了解 fscanf 的新行,请帮助我。否则也欢迎任何替代方式。

提前致谢。

4

2 回答 2

2
fscanf(stream, "%42[^\n]", buffer);

是 fgets(buffer, 42, stream) 的等价物。你不能用 * 替换 42 来指定参数中的缓冲区长度(就像你在 printf 中所做的那样),它的意思是抑制赋值。所以

fscanf(stream, "%*[^\n]%*c");

读取(并包括)下一个行尾字符。

除了 [、c 和 n 之外的任何转换说明符都以跳过空格开头。

于 2009-08-04T13:15:40.893 回答
1

Kernighan 和 Pike 在优秀的《编程实践》一书中展示了如何使用sprintf()来创建适当的格式说明符,包括长度(类似于 AProgrammer 回答中的示例),然后在对scanf(). 这样,您还可以控制分隔符。对这种方法“效率低下”的担忧可能是错误的——替代方案更难正确。

也就是说,我通常不使用scanf()文件 I/O 的函数族。我使用某种“获取行”例程将数据放入字符串中,然后使用sscanf()函数族将其拆分 - 或其他更专业的解析代码。

于 2009-08-04T20:58:40.743 回答