【问题标题】:Using fscanf() when reading from a File in C从 C 中的文件读取时使用 fscanf()
【发布时间】:2020-03-20 22:43:23
【问题描述】:

您好,如果我有一个包含以下文本的文件 (text.txt):

This is a file.

在我的主要方法中,我这样调用 fscanf:

fscanf(fp, "%s", buffer)

然后做

printf("%s", buffer);

fp 是文件指针,缓冲区是一个大小为 100 的 char 数组,用于存储我从文件中读取的内容,

我得到了输出:

This

我明白原因 - 这是因为 %s 将文件扫描到第一个空格。

如果我打电话给

fscanf(fp, " is a %s.", buffer)

然后做

printf("%s", buffer) 

我得到了输出

file.

我想知道为什么会这样,因为我认为%s 只会得到fp 在文件中指向的下一个字符串,所以不应该是这样 is 并不是 file.

【问题讨论】:

标签: c file scanf


【解决方案1】:

fscanf 解析来自文件的格式化数据,当您第一次这样做时:

fscanf(fp, "%s", buffer)

你告诉程序读取第一个单词直到第一个空格,在你的例子中它是This

现在指针位于This| is a file.,所以当你调用时:

fscanf(fp, " is a %s.", buffer)

您告诉程序将%s所在位置的字符串存储到buffer中,这意味着您读取了file.,因为您正在“丢弃”" is a "

要阅读is,您可以这样做:

fscanf(fp, "%s", buffer)

在您第一次拨打fscanf() 之后,您阅读了This

【讨论】:

  • 请注意,当您编写内联代码时,不需要 3 个反引号 - 一个就足够了。所以,`foo`,而不是```foo```
  • @einpoklum-reinstateMonica 哦,是的,你说得对,我只是出于习惯不假思索地做了三个
  • note the space before %s 空格是多余的,因为%s 已经跳过了前导空白字符
  • @Spikatrix 有道理,自从我上次使用 C 并记得 %c 需要它但不记得 %s 是否也需要它已经有一段时间了
猜你喜欢
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多