使用fprintf时的细微差别

时间:2013-12-09 21:07:06

标签: c++ printf

前言 - 我是一个非常新手的c ++程序员。我正在研究一个程序来读取文件,做一些逻辑,并将结果输出到一个新文件。 fprintf表现得很好奇。

double address = 0;
while(!argfs.eof())                  //reading through my file
/*some code */                       //unrelated logic
fprintf(fpmif, "%d", address);       //write the address to my new file
/*some more code */                  //more unrelated logic
address++;                           //increment address and loop

输出文件按照我的预期显示,外,它总是为地址打印0。如果我将地址设为__int64,然后将fprintf语句更改为     fprintf(fpmif,“%i”,地址);

然后我正在写的新文件正确显示增加的地址。任何人都可以了解这里发生的事情吗?

由于

2 个答案:

答案 0 :(得分:4)

首先,如果您只是学习C ++,请不要编写C代码,这就是fprintf。了解如何使用ofstream等流而不是C风格的I / O函数进行I / O操作,因为它们更具惯用性和类型安全性(因为您学到了很多方法)。

然后仔细阅读格式代码,了解%dint。对于%f类型,您需要%e%gdouble

答案 1 :(得分:2)

您的代码有未定义的行为。当您在格式字符串中说%d时,您承诺您将传递int作为第一个变量参数。但是,您实际上正在传递double,因此对编译器撒谎,并且可能发生任何事情

要格式化双精度数,请使用格式说明符%f