题
如何知道的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()
家人将其拆分 - 或更为专业的解析代码
不隶属于 StackOverflow