繁体   English   中英

使用fprintf时的细微差别

[英]Nuances when using fprintf

作为序言-我是一位非常新手的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”,address);

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

谢谢

首先,如果您只是在学习C ++,请不要编写C代码,这就是fprintf含义。 了解如何使用ofstream流而不是C风格的I / O函数进行I / O,因为它们更加惯用且类型安全(如您所知,这很困难)。

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

您的代码具有未定义的行为。 当您在格式字符串中说%d时, 您保证将传递一个int作为第一个变量参数。 但是,实际上您正在传递double ,从而对编译器造成了欺骗, 任何事情都可能发生

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM