2011-05-17 76 views
1

我想创建一个对话框,在我的程序的开始,允许用户输入一个数字,然后在另一个函数中使用(实际上另一个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); 
} 

我想“变量”传递到另一个功能稍后在程序中。问题是,直到很久以后我才需要变量。我不想在每个函数之间传递它,直到它到达程序的正确部分。我该怎么做呢?

此外,当我启动这个时,我得到了对话框,但我想,但框中的数字不是400,如我所料。相反,它是2089881670(!)我以为我是正确处理内存,但不明白为什么。

+0

尝试使用'sprintf(buf,“%lf”,&variable); ' – Mayank 2011-05-17 13:27:23

回答

0

为2089881670的问题,您应该初始化variable这样的:

double variable=0;

某处创建的变量和使用的很远很远,你可以使用全局/静态变量(原文如此),像这个:

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

谢谢 - 我已将它更改为400,但它出现为0.为什么这是?我想默认设置为400,但用户可以通过编辑对话框 – CaptainProg 2011-05-17 13:25:29

0

我认为sprintf需要&variable作为第三个变量。 Try using sprintf(buf, "%lf", &variable);

0

打电话给你的函数的变量,直到你想用它

void function(double *variable) { 
    /* ... */ 
    *variable = 42; 
} 

和使用功能这样

someotherfunction() { 
    double variable; 
    function(&variable); 
    /* ... lots of code ... */ 
    /* ... and much later ... */ 
    use(variable); 
} 

或者,让function回报,将持有的价值地址该值而不是void并通过指针保存

double function(void) { 
    return 42; 
} 

someotherfunction() { 
    double variable; 
    variable = function(); 
    /* ... lots of code ... */ 
    /* ... and much later ... */ 
    use(variable); 
} 
+0

或...不要编写任何不明确的代码,而是使用全局常量。如果该值需要更改,而且您确实必须将其保存在其他代码文件中,那么请在文件范围内使用静态。 – Lundin 2011-05-17 14:03:04

+0

上述答案中的代码有些晦涩难懂? “在程序中很久以后”被减少为2条注释......但这与真实函数应该没什么不同:如果变量的初始化和使用不仅仅是一个屏幕分隔,它是有时间重新组织代码。 – pmg 2011-05-17 16:19:01

+0

那么,你真的在​​真实世界的应用程序中写这样的代码吗?如果不是的话,那么代码根据定义是模糊的。 – Lundin 2011-05-18 06:32:44

0

您可以使用全局变量,如@塞德里克朱利安建议。如果你改变你的sprintf(buf, "%d", variable);sprintf(buf, "%d", (int)variable);第二个问题应该得到解决,因为%d参数涉及到整数类型:http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/

+0

谢谢。我一直在混淆双打和整数。确实,使用静态双重允许我在函数外定义变量,然后在函数中调用它,但是当我稍后在程序中再次调用变量时(在另一个C文件中),我会收到一个'未声明的标识符“错误,就好像变量不存在一样。这两个C文件是链接的,其他变量通过罚款... – CaptainProg 2011-05-17 13:39:10

+0

@Matt,你有没有试过声明你的'变量'为全局非静态的,例如'double variable = 0;''function()'之外?当你在C中用'static'定义某些东西时,它不能从其他.c文件中访问。 – Joulukuusi 2011-05-17 14:13:56

0

“我想‘变量’传递到 另一个函数稍后在 程序。问题是,我不需要 该变量,直到很晚。我不想 想要在每个和每个 函数之间传递它,直到它到达右边的 部分程序,我该怎么做?

这是一个纯粹的程序设计问题,与语言语法无关。如果您的用户输入在main()中处理,然后由处理数据处理的某个文件处理,您为什么需要“在每个函数之间传递它”?将它传递给应该处理它的函数,结尾。你不需要全局变量。