gpt4 book ai didi

c - sscanf() 双显示零

转载 作者:太空狗 更新时间:2023-10-29 15:55:15 26 4
gpt4 key购买 nike

我在使用 sscanf() 函数读取 double 时遇到问题。我有一个逗号分隔的文本文件,如下所示:

ABC,DEF,0.465798,0.754314
GHI,JKL,0.784613,0.135264
MNO,OPQ,0.489614,0.745812
etc.

所以我首先使用 fgets() 获取行,然后使用 sscanf() 获取两个字符串和两个 double 变量。

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

所以它不会以某种方式扫描最后一个 float 。我试过 %lf[^\t\n\r\v\f,]%lf 但它仍然不起作用。

最佳答案

改变

"%4[^,],%4[^,],%lf[^,],%lf[^\n]"

int result;
result = sscanf(buffer, "%4[^,],%4[^,],%lf,%lf", string1, string2, &double1, &double2);
if (result != 4) // handle error

请注意 double1double2 上的 & - 可能是打字错误。

强烈建议检查结果是否为 4。不检查 sscanf() 结果才是这个问题的核心。打印出的“零”是 double2 未被扫描并保留其先前值的结果,该值可能是任何东西。如果检查了 sscanf() 结果,它会报告 3,表明问题出在扫描 double1double2 之间。但在更大的场景中,最好在继续之前验证所有预期值是否已扫描。

关于c - sscanf() 双显示零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17970064/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com