【问题标题】:Is there any reason to use scanf or fscanf over fgets+sscanf有什么理由在 fgets+sscanf 上使用 scanf 或 fscanf
【发布时间】:2011-06-18 11:57:14
【问题描述】:

由于您不是从流中读取数据,因此它看起来更加灵活。 两者都提到,因为您可以轻松更改读取的时间/代码位置,那么您可以使用 c 流(我错了,您可以制作字符串,等到 c FILE * 流中)吗?

另外,我不知道我只是对scanf 感到有些奇怪。 scanf 的任何优点/缺点将不胜感激。

编辑:我的意思是使用 scanf 或 fscanf 与 fgets+sscanf 的组合

【问题讨论】:

    标签: c scanf


    【解决方案1】:

    C FAQ 很好地解决了这个问题。

    为什么大家都说不用 扫描?我应该改用什么?

    如果您正在读取受信任的文件(不是 stdin),则使用 fgets + sscanf 代替 fscanf 是没有意义的。确实使用scanf(从stdin读取)是有问题的。

    【讨论】:

      【解决方案2】:

      如果您期待integer,但您读取的是floating point 或其他不兼容的类型,您可以检查scanf 的返回值。如果它返回零,那么你没有读过integer - 但是fgets 你不能这样做。另外,通过查看scanf的返回值,可以看到读取的项目数。

      【讨论】:

      • 你可以用 sscanf 做到这一点。
      • 您也可以尝试在出错时尽可能多次地尝试从字符串中读取其他不同的类型/simpe 模式。我认为 scanf 没有简单的方法来做到这一点。
      • 编辑:我的意思是使用 scanf 或 fscanf 与 fgets+sscanf 的组合
      猜你喜欢
      • 2014-04-15
      • 1970-01-01
      • 2014-07-18
      • 1970-01-01
      • 1970-01-01
      • 2020-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多