Передача двойного к последующему в программе - использование диалогового окна для ввода - PullRequest
0 голосов
/ 06 июня 2011

Я пытаюсь передать значение 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' и пытаюсь его восстановить.Поэтому проблема должна лежать в верхнем блоке кода.Что я сделал не так?

Ответы [ 4 ]

2 голосов
/ 06 июня 2011

Я думаю, что вы хотите sscanf вместо sprintf - и как @ dragon135 упомянул %lf вместо %d

2 голосов
/ 06 июня 2011

Когда вы говорите:

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

вы пытаетесь напечатать двойное число с помощью целочисленного преобразователя, который даст странные результаты, в зависимости от того, что находится в Max - вы хотите:

sprintf( MaxBuf, "%f", Max);
1 голос
/ 06 июня 2011

Прежде всего, определение переменной в файле заголовка не является хорошей практикой , поскольку каждый файл, который включает этот заголовок , будет иметь свою собственную версию переменной (если вы не используете некоторые охраняющий макрос , чтобы предвидеть это).

Вот почему вы испытываете неинициализированную переменную , поскольку она отличается от переменной, которую вы инициализировали ранее.

Вместо этого вам лучше определить переменную double Max; в файле C ++, а затем добавить extern double Max; в соответствующий заголовочный файл. Таким образом, будет только одно определение переменной, даже если заголовочный файл включен более чем в один файл.

Кстати, вы должны использовать %lf для double, а не %d:

sprintf( MaxBuf, "%lf", Max); // Max is of type double
0 голосов
/ 06 июня 2011

Похоже, что каждая единица перевода (в основном это означает, что исходный файл) получает свою версию глобальной переменной.

Вы должны определить его как int Max; только в одном файле и как extern int Max; в заголовке.

Или, что еще лучше, не используйте глобальные переменные. ;)

...