fscanf()在不同的机器上表现不同

时间:2012-07-01 10:21:32

标签: c scanf

下面的代码行应该读取一个字符串,一个int和两个用逗号分隔的双精度数并将它们存储在变量中。

fscanf(f,"%[^,],%d,%Lf,%Lf",name,&id,&east, &north);

它适用于我的Visual Studio 2010编译器并读取正确的值。我在另一台机器上运行程序,我在这台机器上有三个数字的随机值,但字符串的值是正确的。

它可能是什么?

1 个答案:

答案 0 :(得分:1)

%Lf适用于long double类型,而非double。在Microsoft编译器上,long double具有与double相同的大小和表示,因此它恰好起作用,但是您的代码仍然通过使用不匹配的格式说明符来调用未定义的行为。将%lfdouble一起使用,或者如果您想使用long double,则将类型更改为%Lf,它应该可以在任何地方使用。