【发布时间】:2013-07-31 12:12:16
【问题描述】:
我在使用 sscanf() 函数读取双打时遇到问题。我有一个逗号分隔的文本文件,如下所示:
ABC,DEF,0.465798,0.754314
GHI,JKL,0.784613,0.135264
MNO,OPQ,0.489614,0.745812
etc.
所以我首先使用 fgets() 获取行,然后使用 sscanf() 获取两个字符串和两个双变量。
fgets(buffer, 28, file);
sscanf(buffer, "%4[^,],%4[^,],%lf[^,],%lf[^\n]", string1, string2, &double1, &double2);
printf("%s %s %f %f\n", string1, string2, double1, double2);
但是输出是:
ABC DEF 0.465798 0.000000
GHI JKL 0.784613 0.000000
MNO OPQ 0.489614 0.000000
所以不知何故它不会扫描最后一个浮点数。我试过%lf[^ \t\n\r\v\f,] 和%lf,但还是不行。
【问题讨论】:
-
为什么不使用简单得多的格式字符串
"%3s,%3s,%lf,%lf"? -
将
"%4[^,],%4[^,],%lf[^,],%lf[^\n]"更改为"%4[^,],%4[^,],%lf,%lf" -
您没有显示您的真实代码(您需要将 &double1 和 &double2 传递给 sscanf)。剪切并粘贴您的实际代码,然后我们可能会提供帮助。
-
感谢 chux,它成功了,我认为我应该使用 [^,] 双打,因为我没有空格。当我问这个问题时,我有“&”符号(现在编辑了代码),这是一个错字,很抱歉。
-
由于
[^,]不是以%开头的,因此 sscanf() 正在查找输入字符串中的 4 个字母。未能找到这些,扫描停止,将double2保留为之前的值。因此检查 sscanf() 结果的重要性。谁知道文件和标准输入中有哪些邪恶数据?