使用fprintf时的Nuances

Nuances when using fprintf

本文关键字:Nuances 时的 fprintf 使用      更新时间:2023-10-16

前言-我是一个非常新手的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",地址);

然后,我正在写入的新文件将正确显示递增地址。有人能告诉我们这里发生了什么吗?

感谢

首先,如果你只是在学习C++,就不要写C代码,这就是fprintf。学习如何使用流(如ofstream)而不是C风格的I/O函数进行I/O,因为它们更惯用,更安全(正如你所学到的)。

然后仔细阅读格式代码,了解到%d就是int。您需要%f%e%g作为类型double

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

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