从C中的文件读取时使用fscanf()

问题描述 投票:1回答:1

嗨,如果我有一个包含以下文本的文件(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个回答
1
投票

fscanf第一次解析来自文件的格式化数据:

fscanf(fp, "%s", buffer)

您告诉程序读取第一个单词直到第一个空格,在您的示例中为This

现在指针在This| is a file.处,因此在您调用时:

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

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

要阅读is,您可以做:

fscanf(fp, " %s", buffer) // note the space before %s

在您第一次阅读fscanf()This通话之后

© www.soinside.com 2019 - 2024. All rights reserved.