在程序中稍后传递一个双精度-使用对话框进行输入

Passing a double to later in a program - using a dialog box for entry

本文关键字:双精度 一个 对话框 输入 程序      更新时间:2023-10-16

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

当你说:

 sprintf( MaxBuf, "%d", Max);

您正试图使用整数转换器打印双精度,这将给出奇怪的结果,这取决于Max中的内容-您想要:

sprintf( MaxBuf, "%f", Max);

我想你想要sscanf而不是sprintf,正如@dragon135提到的%lf而不是%d

首先,在头文件中定义变量不是一个好的做法,因为包含该头的每个文件都有自己版本的变量(除非您使用一些保护宏来预测这一点)。

这就是您遇到未初始化变量的原因,因为它与您之前初始化的变量不同。

相反,您最好在C++文件中定义变量double Max;,然后在相应的头文件中添加extern double Max;。这样,即使头文件包含在多个文件中,变量也只能有一个定义。

顺便说一下,您应该使用%lf作为double,而不是%d:

sprintf( MaxBuf, "%lf", Max); // Max is of type double

听起来每个翻译单元(基本上意味着源文件)都在获得自己版本的全局变量。

您应该只在一个文件中将其定义为int Max;,并在头文件中将其为extern int Max;

或者更好的是,不要使用全局变量。)

相关文章: