2

我正在尝试从 C 中的文件中读取数据,该文件将始终以这种类型的行格式化:

16 Oct 2013 00:01:00.000,0.000,0.000000

这是一个字符串、一个逗号、一个浮点数、一个逗号、一个浮点数和一个\n.

我得到了一些奇怪的东西,我开始尝试只使用字符串,我意识到这一点:

fscanf(filefd, "\n%24[^,]s", data);
fscanf(filefd, ",%5s", data2);

fscanf(filefd, "\n%24[^,]s,", data);
fscanf(filefd, "%5s", data2);

fscanf(filefd, "\n%24[^,]s,%5s", data, data2);

为什么第一个案例有效而其他两个无效?如果我将逗号放在变量之前,在格式字符串的开头,它可以工作。如果我将逗号放在其他格式字符串中,但最后,我会在data2. 最后,如果我把它们放在一起,data2没有任何有效数据,但data有。

我是否缺少一些东西来获得这种奇怪的行为?

4

1 回答 1

3

for 的相应参数类型已经是一个字符串,因此在之后%[]的尾随不需要指示字符串目标,因此预计会出现在输入流中。在所有情况下,输入都会在 之后停止使用,因为不存在,而将 留在输入流中。s]]s,

第一个片段有效,因为它,独立于处理]s,最后两个片段没有,因此失败,因为s,没有出现在输入流中。

始终检查返回值fscanf()以确定成功分配的次数。

于 2013-07-08T08:41:47.970 回答