如何知道的fscanf达到在文件中的新行\ n。 我一直在用自己的功能做。我知道我可以用fgets,然后sscanf的我需要的图案。但我的要求并不稳定,有时我想TAB分隔的字符串,有时新行分隔字符串,有时一些特殊的字符分隔字符串。所以,如果有任何办法知道新线从的fscanf请帮助我。否则任何替代方式也是受欢迎的。

由于事先。

有帮助吗?

解决方案

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

是与fgets的equivalant(缓冲液,42,流)。您无法通过*更换42到指定参数中的缓冲区长度(你可以在printf中一样),其含义是抑制分配。所以

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

读高达(并包括)行字符的下一个端部。

比其他任何转换说明[,C和N通过跳过空格开始。

其他提示

Kernighan和派克在出色的书“编程的实践'显示了如何使用sprintf()创建一个适当的格式说明包括长度(类似于由AProgrammer答案的实施例),然后使用在调用scanf()。这样的话,你还可以控制分离器。关于这种方法的“低效率”的担忧可能是误导 - 替代品是很难得到正确的

这就是说,我最通常不使用的功能的scanf()家族文件I / O;我得到的数据与某种“让行”程序的字符串,然后使用功能的sscanf()家人将其拆分 - 或更为专业的解析代码

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top