C 如何在“编程/输入到”对话框中将变量传递到后面
我试图在程序开始时创建一个对话框,允许用户输入一个数字,然后在程序中的其他函数(实际上是另一个C文件)中使用C 如何在“编程/输入到”对话框中将变量传递到后面,c,variables,double,C,Variables,Double,我试图在程序开始时创建一个对话框,允许用户输入一个数字,然后在程序中的其他函数(实际上是另一个C文件)中使用 void function() { double variable; char buf[256] = "400"; sprintf( buf, "%d", variable); #ifdef WIN32 edit_dialog(NULL,"Enter variable", "Please enter the variable:", buf,260); #endif variable =
void function()
{
double variable;
char buf[256] = "400";
sprintf( buf, "%d", variable);
#ifdef WIN32
edit_dialog(NULL,"Enter variable", "Please enter the variable:", buf,260);
#endif
variable = atof(buf);
}
我想稍后在程序中将“variable”传递到另一个函数中。问题是,我不需要变量,直到很久以后。我不想在每个函数之间传递它,直到它到达程序的正确部分。我该怎么做
同样,当我启动这个程序时,我得到了我期望的对话框,但是对话框中的数字不是我期望的400。相反,它是2089881670(!),我假设我处理内存不正确,但不理解原因。对于2089881670问题,您应该初始化
变量,如下所示:
static double variable;
void function()
{
char buf[256] = "400";
sprintf( buf, "%d", variable);
#ifdef WIN32
edit_dialog(NULL,"Enter variable", "Please enter the variable:", buf,260);
#endif
variable = atof(buf);
}
双变量=0代码>
对于在某处创建并在很远的地方使用的变量,可以使用全局/静态变量(sic),如下所示:
static double variable;
void function()
{
char buf[256] = "400";
sprintf( buf, "%d", variable);
#ifdef WIN32
edit_dialog(NULL,"Enter variable", "Please enter the variable:", buf,260);
#endif
variable = atof(buf);
}
我认为sprintf需要变量作为第三个变量<代码>尝试使用sprintf(buf、%lf、&variable)代码>使用变量的地址调用函数,该变量将保存该值,直到您想要使用它为止
void function(double *variable) {
/* ... */
*variable = 42;
}
然后像这样使用函数
someotherfunction() {
double variable;
function(&variable);
/* ... lots of code ... */
/* ... and much later ... */
use(variable);
}
或者,使函数
返回值,而不是无效
,并通过指针保存
double function(void) {
return 42;
}
someotherfunction() {
double variable;
variable = function();
/* ... lots of code ... */
/* ... and much later ... */
use(variable);
}
正如@Cédric Julien所建议的,您可以使用全局变量。如果更改sprintf(buf,“%d”,变量),则应解决第二个问题代码>到sprintf(buf,“%d”,(int)变量)代码>,因为%d
参数与整数类型相关:
“我想将‘变量’传递到
稍后在
程序。问题是,我不需要
直到很久以后,我才知道这个变量
想在每个人之间传递吗
直到它到达正确的位置
项目的一部分,我该怎么做?”
这是一个纯粹的程序设计问题,与语言语法无关。如果您的用户输入在main()中处理,然后由处理数据处理的某个文件处理,那么为什么需要“在每个函数之间传递它”?将它传递给应该处理它的函数,故事结束。您不需要全局变量。谢谢-我已将其更改为400,但结果为0。为什么会这样?我想在默认情况下将其设置为400,但是用户可以通过编辑对话框try使用sprintf(buf、%lf、&variable)来更改它代码>谢谢。我把双精度和整数搞混了。的确,使用static double允许我在函数外部定义变量,然后在函数中调用它,但是当我稍后在程序中再次调用变量时(在另一个C文件中),我收到一个“未声明的标识符”错误,就好像该变量不存在一样。两个C文件被链接,其他变量被传递。很好…@Matt,您是否尝试将变量
声明为全局非静态变量,例如双变量=0代码>在函数()之外。
?当您在C中将某个内容定义为静态
时,无法从其他.C文件访问它。或者。。。不要编写任何晦涩难懂的代码,而是使用一个全局常量。如果需要更改该值,并且您确实必须将其保存在其他代码文件中,那么请在文件范围内使用static?假定程序中的后面的减少为2行注释。。。但这与实际函数应该是什么并没有太大区别:如果变量的初始化和使用之间的距离超过了一个屏幕,那么是时候重新组织代码了。那么,你真的在现实世界的应用程序中编写了这样的代码吗?如果不是,那么代码的定义是模糊的。我理解你所说的,但我不同意代码是“模糊的”。我更喜欢它,而不是引入一个全球性的体系。gcc
对实际应用程序是否有效?我认为设置后,使用-o
标志将是“程序中的稍后时间”。