Как передать переменную позже в программе / Ввод двойного в диалоговое окно - PullRequest
1 голос
/ 17 мая 2011

Я пытаюсь создать диалоговое окно в начале моей программы, которое позволяет пользователю вводить число, которое затем используется в другой функции (фактически в другом файле 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 (!) Я предполагаю, что неправильно обрабатываю память, но не понимаю почему.

Ответы [ 5 ]

0 голосов
/ 17 мая 2011

"Я хотел бы передать переменную в другую функцию позже в программе. Проблема в том, что мне не нужна переменная намного позже. Я не хочу передавать ее между каждыми каждая функция, пока она не попадет в правую часть программы. Как мне это сделать? "Если ваш пользовательский ввод обрабатывается в main (), а затем обрабатывается каким-то файлом, который обрабатывает данные, зачем вам нужно «передавать его между каждой функцией»?Передайте это функции, которая должна обработать это, конец истории.Вам не нужны никакие глобальные переменные.

0 голосов
/ 17 мая 2011

Для этого вы можете использовать глобальные переменные, как предложил @ Cédric Julien. Вторая проблема должна быть решена, если вы измените свой sprintf( buf, "%d", variable); на sprintf(buf, "%d", (int)variable);, поскольку параметр %d относится к целочисленным типам: http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/

0 голосов
/ 17 мая 2011

Я думаю, что sprintf нужна &variable в качестве третьей переменной.Try using sprintf( buf, "%lf", &variable);

0 голосов
/ 17 мая 2011

Вызовите вашу функцию с адресом переменной, в которой будет храниться значение, пока вы не захотите его использовать

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 голосов
/ 17 мая 2011

Для проблемы 2089881670 вы должны инициализировать variable следующим образом:

double variable=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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...