我正在尝试从 C 语言的文件中读取数据,该文件将始终以这种类型的行进行格式化:
16 Oct 2013 00:01:00.000,0.000,0.000000
这是一个字符串、一个逗号、一个 float 、一个逗号、一个 float 和一个 \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
有。
我是否错过了一些东西来获得这种奇怪的行为?
最佳答案
%[]
对应的参数类型已经是一个字符串,因此尾随 s
]
之后不需要指示字符串目标,因此预计会出现在输入流中。在所有情况下,输入在]
之后停止被消耗。因为s
不存在,留下,
在输入流中。
第一个代码片段有效,因为它处理 ,
独立于]s
,最后两个片段没有,因此失败,因为 s,
不会出现在输入流中。
始终检查 fscanf()
的返回值确定成功分配的数量。
关于c - Fscanf 和分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17522214/