【发布时间】:2012-07-02 03:07:57
【问题描述】:
下面这行代码应该读取一个字符串、一个整数和两个用逗号分隔的双精度数并将它们存储在变量中。
fscanf(f,"%[^,],%d,%Lf,%Lf",name,&id,&east, &north);
它适用于我的 Visual Studio 2010 编译器并读取正确的值。我已经在另一台机器上运行该程序,在该机器上我有三个数字的随机值,但字符串的值是正确的。
会是什么?
【问题讨论】:
-
%Lf转换说明符用于long double,而不用于double,%lf用于double。 -
%Lf是为long double而不是普通的double。对于 Microsoft 编译器,long double 的大小与 double 相同,但其他编译器具有扩展大小的 long double。我不知道 int 出了什么问题,除非 id 实际上很长并且您有 32 位/64 位不匹配? -
你们为什么不把它作为答案发布?这很可能是问题所在。
-
好的,是的,我狙击了这个,但是将答案作为评论而不是答案发布确实不是正确使用 SO...
-
另一台机器上的操作系统和编译器是什么?您是否检查了来自
fscanf()的返回值,所以您知道有多少转化有效?如果fscanf()没有报告 4,那么你就有问题了。另一个编译器是gcc吗?如果是这样,当您使用-Wall启用警告时它告诉您什么?