【问题标题】:Skip Line with fscanf使用 fscanf 跳线
【发布时间】:2017-01-09 01:58:38
【问题描述】:

当我使用 fscanf 和 C 读取文件时使用以下内容跳过一行时,我收到以下编译器警告:

warning: too many arguments for format [-Wformat-extra-args]
fscanf(myFile, "%*[^\n]\n", NULL);  

该程序运行良好。但是,我想知道是否有一种方法可以跳过文件中的一行,它与上述一样简约并且不给出编译器警告(或者对上述内容进行简单的编辑是理想的)?这种跳过一行的方法取自How to skip the first line when fscanning a .txt file?,其中没有提到任何此类警告。上一个问题中介绍了其他跳线方法;然而,没有一个像上面那样简约。

【问题讨论】:

  • fscanf(myFile, "%*[^\n]\n", NULL); --> fscanf(myFile, "%*[^\n]\n"); 但其他代码会更好。
  • 简单。说到点子上了。不再有编译器警告。干杯,@chux。
  • 你应该知道,虽然fscanf()调用只会返回0(或EOF,如果它开始扫描时没有更多的输入),它只会读取一个换行符,如果有至少一个下一个换行符之前的非换行符。如果您想要基于行的输入,请不要使用scanf() 系列函数;使用fgets()(或者,在POSIX机器上,使用getline())。然后,您可以使用sscanf() 在适当的情况下解析该行。
  • 有趣。谢谢,乔纳森!我将研究 fgets(),因为您和 chux 都认为 fscanf 的这种实现可能不是最佳选择。

标签: c


【解决方案1】:

删除NULL。警告是因为编译器从* 了解到您不想将结果存储在任何地方(而只是使用指定的模式推进文件)。但随后它会以某种方式“惊讶”您指定一个位置(无论是 NULL)。

【讨论】:

  • 非常感谢@A.S.H,非常有意义。没有更多的警告。新年快乐!
猜你喜欢
  • 2014-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-31
  • 1970-01-01
  • 1970-01-01
  • 2013-10-27
  • 2014-07-20
相关资源
最近更新 更多