使用fprintf时的Nuances
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",地址);
然后,我正在写入的新文件将正确显示递增地址。有人能告诉我们这里发生了什么吗?
感谢
首先,如果你只是在学习C++,就不要写C代码,这就是fprintf
。学习如何使用流(如ofstream
)而不是C风格的I/O函数进行I/O,因为它们更惯用,更安全(正如你所学到的)。
然后仔细阅读格式代码,了解到%d
就是int
。您需要%f
、%e
或%g
作为类型double
。
您的代码有未定义的行为。当您在格式字符串中说%d
时,您承诺将传递一个int
作为第一个变量参数。然而,您实际上是在传递double
,从而对编译器撒谎,并且任何事情都可能发生。
要格式化双精度,请使用格式说明符%f
。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- ostream过载时的缓冲区冲洗
- 具有未知值时的时间复杂性
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 当比特(而不是字节)的顺序至关重要时的持久性
- 旋转模型矩阵时的形状失真
- 讨论 - 创建矩阵时的数组与向量的向量 - 什么是最实用的选择
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 打印第二列时的2d字符矢量打印空间
- 读取文件时运行时的未知行为
- posix_spawn():使用posix_scawn()时的错误处理问题
- 查找最近配对时的OpenMP竞赛条件
- 如何修复valgrind启动时的致命错误(与libc6-dbg和libc6-dbg:i386连接)
- 在 c++ 中在开关情况下使用和不使用"break"时的不同输出
- 求和 int 乘以双倍时的欠/过近似
- 打包可变参数模板具有零元素时的递归
- 在Qt5中使用QTextSteam时的"使用已删除功能"
- 内存错误低于在C++年实现埃拉托色尼筛分时的预期
- 尝试了解在导入的静态方法上使用删除方法时的错误
- 使用fprintf时的Nuances