[英]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,因为它们更加惯用且类型安全(如您所知,这很困难)。
然后,仔细阅读格式代码,了解%d
是int
。 您需要%f
, %e
或%g
作为double
类型。
您的代码具有未定义的行为。 当您在格式字符串中说%d
时, 您保证将传递一个int
作为第一个变量参数。 但是,实际上您正在传递double
,从而对编译器造成了欺骗, 任何事情都可能发生 。
要格式化双精度格式,请使用格式说明符%f
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.