在程序中将double传递给稍后 - 使用对话框进行输入

时间:2011-06-06 15:10:50

标签: c++ double global

我正在尝试传递一个在我的程序中稍后使用的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'文件中删除了我的代码并尝试恢复它。因此,问题必须在于顶部的代码块。我做错了什么?

4 个答案:

答案 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;

甚至更好,不要使用全局变量。 ;)