2013-07-08 55 views
2

我试图从在C文件,该文件将始终格式化这个类型的行读取数据:FSCANF和分隔符

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了。

我是否错过了一些可以获得这种奇怪行为的东西?

+0

谢谢你,谢谢你的更正,我不是英语母语的,我通常会犯错! – markmb

回答

3

%[]相应参数类型已经是一个字符串,因此]后尾随s是不需要的,以指示一个字符串对象,因此预计将存在于输入信息流中。在所有情况下,在]之后输入停止消耗,因为s不存在,将,留在输入流中。

的第一个片段的作品,因为它处理单独的]s,,因为s,不输入流中出现在最后两个片段没有,因此失败。

请务必检查返回值fscanf()以确定成功分配的次数。

+0

昨天一个简单的额外让我发疯。这么简单,现在的工作和预期一样完美。 – markmb