【问题标题】:fscanf not scan line after whitespacefscanf 不在空格后扫描行
【发布时间】:2012-09-15 01:03:04
【问题描述】:

我的 fscanf 函数有问题

请原谅我的英语不好。

程序读取文件如下:

status = fscanf(ifile, "%%!%11s", ifbuf);

如果文件直接以所需条目开头,例如

%! UTF-8
some text

fscanf 读取ifbuf 中的一行。 如果在行中以空格开头

    %! UTF-8
some text

fscanf 不读取任何内容。

可以通过在格式字符串中添加一个空格来使fscanf 函数在这两种情况下都起作用:

status = fscanf(ifile, " %%!%11s", ifbuf);

我想知道fscanf 函数的行为有多正确。

【问题讨论】:

  • 你仔细阅读fscanf的规范和文档了吗?多读几遍!
  • fscanf 应该跳过前导空格,不是吗?
  • 不,它应该能够读取任何字符,包括空格。顺便说一句,fscanf 是一个核心功能,您可以确信它可以按预期工作

标签: c scanf


【解决方案1】:

您所描述的观察到的行为是正确的行为。 scanf() 函数仅在某些转换规范中跳过前导空格(大多数——除了%c%[ 之外的所有)转换规范。对于格式字符串的文字部分,它的行为或多或少是字面意思,只是格式字符串中的空格与数据中任意数量的空白字符匹配。

【讨论】:

    【解决方案2】:

    您在格式字符串中使用了s,它匹配非空白字符的字节序列。该函数读取字节,根据格式对其进行解释,并将结果存储在其参数中。

    在您的情况下,它会找到以空格开头的行,这与您要查找的格式不匹配。

    【讨论】:

      猜你喜欢
      • 2012-07-14
      • 2013-10-30
      • 2016-05-04
      • 1970-01-01
      • 2011-05-09
      • 2020-10-24
      • 1970-01-01
      • 1970-01-01
      • 2017-10-12
      相关资源
      最近更新 更多