我正在尝试传递一个在我的程序中稍后使用的double。程序启动时,会出现一个对话框,要求输入一个数字。以下代码应该接收该数字的条目,并将其转换为要传递的double:
char MaxBuf[256];
#ifdef WIN32
edit_dialog(NULL,"Max", "Enter Max:", MaxBuf,260);
#endif
sprintf( MaxBuf, "%d", Max);
请注意,'Max'在头文件中定义为全局变量,方式如下:
double Max;
但是,当我到达程序中的后一点(单独的C ++文件中的单独子例程)时,Max的值未初始化。我知道变量在头文件中正确定义,因为这对我来说已经有用了;我刚刚在'main.c'文件中删除了我的代码并尝试恢复它。因此,问题必须在于顶部的代码块。我做错了什么?
答案 0 :(得分:2)
当你说:
sprintf( MaxBuf, "%d", Max);
你正在尝试使用整数转换器打印一个double,这将产生奇怪的结果,具体取决于你想要的Max:
sprintf( MaxBuf, "%f", Max);
答案 1 :(得分:2)
我认为你想要sscanf
代替sprintf
- 并且@ dragon135提到%lf
而不是%d
答案 2 :(得分:1)
首先,在头文件中定义变量不是一个好习惯,因为包含该标题的每个文件都有自己的变量版本(除非你使用一些防护宏来预测这个。)
这就是为什么你遇到未初始化的变量,因为它与你之前初始化的变量是不同的变量。
相反,您最好在C ++文件中定义变量double Max;
,然后在相应的头文件中添加extern double Max;
。这样,即使头文件包含在多个文件中,也只会有一个变量定义。
顺便说一下,您应该%lf
使用double
,而不是%d
:
sprintf( MaxBuf, "%lf", Max); // Max is of type double
答案 3 :(得分:0)
听起来每个翻译单元(基本上就是源文件)都会获得自己的全局变量版本。
您应该只在一个文件中将其定义为int Max;
,并在标题中将其定义为extern int Max;
。
甚至更好,不要使用全局变量。 ;)