前言 - 我是一个非常新手的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”,地址);
然后我正在写的新文件正确显示增加的地址。任何人都可以了解这里发生的事情吗?
由于
答案 0 :(得分:4)
首先,如果您只是学习C ++,请不要编写C代码,这就是fprintf
。了解如何使用ofstream
等流而不是C风格的I / O函数进行I / O操作,因为它们更具惯用性和类型安全性(因为您学到了很多方法)。
然后仔细阅读格式代码,了解%d
是int
。对于%f
类型,您需要%e
,%g
或double
。
答案 1 :(得分:2)
您的代码有未定义的行为。当您在格式字符串中说%d
时,您承诺您将传递int
作为第一个变量参数。但是,您实际上正在传递double
,因此对编译器撒谎,并且可能发生任何事情。
要格式化双精度数,请使用格式说明符%f
。