如何知道fscanf中的新行字符?

时间:2009-08-04 09:56:46

标签: c newline scanf

如何知道fscanf在文件中到达了新行\ n。 我一直在使用自己的功能来做到这一点。我知道我可以使用fgets然后使用sscanf来获取我所需的模式。但是我的要求不稳定,有时候我想得到TAB分隔的字符串,有时候是新行分隔的字符串,有时候是一些特殊的字符分隔字符串。所以,如果有任何方法可以从fscanf了解新行,请帮助我。或者也欢迎任何其他方式。

提前谢谢。

2 个答案:

答案 0 :(得分:2)

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

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

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

读取(并包含)下一行符号字符。

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

答案 1 :(得分:1)

Kernighan和Pike在优秀书籍“The Practice of Programming”中展示了如何使用sprintf()创建一个合适的格式说明符,包括长度(类似于AProgrammer答案中的例子),然后使用在scanf()的电话中。这样,您还可以控制分隔符。对这种方法“效率低下”的担忧可能是错误的 - 替代方案难以做到正确。

那就是说,我通常不会将scanf()系列函数用于文件I / O;我将数据转换为带有某种“get line”例程的字符串,然后使用sscanf()系列函数将其拆分 - 或者使用其他更专业的解析代码。