Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在“编程/输入到”对话框中将变量传递到后面_C_Variables_Double - Fatal编程技术网

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 =

我试图在程序开始时创建一个对话框,允许用户输入一个数字,然后在程序中的其他函数(实际上是另一个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 = 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
标志将是“程序中的稍后时间”。