Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/41: Рейтинг темы: голосов - 41, средняя оценка - 4.54
 Аватар для zewer
2356 / 1774 / 212
Регистрация: 07.01.2011
Сообщений: 10,342

Как сменить тип с int на double или float в MFC?

14.08.2011, 22:16. Показов 8907. Ответов 45
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
такая проблема у меня....
мне нужно в диалоге отнять 2 числа, если числа типу int, то написать било просто, а вот сделать так, чтоб пахало для double и float у меня не получаеться, подскажите что не так делаю
код програми
C++
1
2
3
4
5
6
7
8
9
void CprogDlg::OnClickedButton1()
{
    int m_1, m_2, m_3;
    m_1 = GetDlgItemInt(IDC_EDIT1);
    m_2 = GetDlgItemInt(IDC_EDIT2);
    m_3 = m_1 - m_2;
    SetDlgItemInt(IDC_EDIT3, m_3);
 
}
если в строчке
C++
1
int m_1, m_2, m_3;
сменить на double, програма все равно пашет только для int, а если сменить на double в етих строчках:
C++
1
2
m_1 = GetDlgItemInt(IDC_EDIT1);
m_2 = GetDlgItemInt(IDC_EDIT2);
то програма не пашет вобше, подскажите новичку что не так делаю?????
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.08.2011, 22:16
Ответы с готовыми решениями:

Как в VC++ переводить строки в тип int или float ???????
Здравствуйте .... уважаемые программисты ... помогите пожалуйста перевести тип строка в тип float.... какие библиотеки использовать,...

Float в int или double в int
Надо прибавить в Shape1->Top+=0,33, но когда перевожу в int то он округляет до нуля, чего быть не должно, как это реализовать?

Как определить тип данного (int или double) введенного через textbox?
Нужно так Ввожу 2 к примеру, число записывается в List<> типа int Ввожу 2,3 - число записывается в List<> типа double.

45
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
14.08.2011, 22:51
сделать GetDlgItemText и сконвертировать через atof, sscanf (wtof, sscwnf)или что угодно из строки в double
0
 Аватар для zewer
2356 / 1774 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
14.08.2011, 22:55  [ТС]
Цитата Сообщение от alex_x_x Посмотреть сообщение
сделать GetDlgItemText и сконвертировать через atof, sscanf или что угодно
я изучаю диалог только 2 дня, поетому не очень понял что ви написали ....
можно поподробней???
как ето сконвертировать??

Добавлено через 2 минуты
работаю в диалоге
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
14.08.2011, 23:08
ну почти то же, что и ви пишите

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void CprogDlg::OnClickedButton1()
{
        double m[2];
        const size_t size_buffer = 50;
 
        TCHAR szBuff[size_buffer] = {0};
        const int nIdentifier[] = {IDC_EDIT1, IDC_EDIT2};
        bool bOk = true;
 
        for( unsigned i = 0 ; i<2 && bOk; ++i )
        {
          if( !GetDlgItemText(nIdentifier[i], szBuff, size_buffer) )
          {
             m[i] = _ttof( szBuff );
             if( !errno )
             {
                  bOk = false;             
             }
           }
           else
           {
                  bOk = false; 
           } 
        }
        if( bOk )
        {
             _stprintf( szBuff, _T("%f"), m[1] - m[2] )
             SetDlgItemText( IDC_EDIT3, szBuff );
        }
}
ну это примерно, не проверял
1
 Аватар для zewer
2356 / 1774 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
14.08.2011, 23:17  [ТС]
такой вопрос:
я не увидел чтоб ви гдето использували atof или другое что ви писали в предидущем посте...
а так же моя прога должна делать елементарное, например 4.7-3.2
поетому делать через масив я не буду, или для того чтоб использовать атоф, обязательно делать через масив????
а то я не знаю как работает функция atof
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
14.08.2011, 23:21
тут не atof, тут _ttof, ну вообщем тяжело вам будет - учите основы
насчет массивов - лениво было два раза одно и тоже писать
1
 Аватар для zewer
2356 / 1774 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
14.08.2011, 23:41  [ТС]
результат не виводиться в 3 поле, но прога компилируеться с 1 warning, предупреждает о том, что в строчке
C++
1
_stprintf( szBuff, _T("%f"), m[1] - m[2] );
функция _stprintf не сохранена, как ето исправить?
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
14.08.2011, 23:45
приведит точное описание warning'a
0
 Аватар для zewer
2356 / 1774 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
14.08.2011, 23:47  [ТС]
warning C4996: '_swprintf': This function or variable may be unsafe. Consider using _swprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
14.08.2011, 23:52
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
void CprogDlg::OnClickedButton1()
{
        double m[2];
        const size_t size_buffer = 50;
 
        TCHAR szBuff[size_buffer] = {0};
        const int nIdentifier[] = {IDC_EDIT1, IDC_EDIT2};
        bool bOk = true;
 
        for( unsigned i = 0 ; i<2 && bOk; ++i )
        {
          if( 0 != GetDlgItemText(nIdentifier[i], szBuff, size_buffer) )
          {
             m[i] = _ttof( szBuff );
             if( 0 != errno )
             {
                  // there isn't double
                  bOk = false;             
             }
           }
           else
           {
                  // there is empty pole
                  bOk = false; 
           } 
        }
        if( bOk )
        {
             _stprintf_s( szBuff, size_buffer, _T("%f"), m[1] - m[2] )
             SetDlgItemText( IDC_EDIT3, szBuff );
        }
}
0
 Аватар для zewer
2356 / 1774 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
14.08.2011, 23:57  [ТС]
да что за...
варнинг пропал (спасибо), но кнопка и дальше неактивна...(всмисле когда я нажимаю на нее, не виводиться результат)
и мне почему то кажеться, что дело сдесь
C++
1
SetDlgItemText( IDC_EDIT3, szBuff );
я понимаю, что я уже замахую, но если не сложно, то в чем проблема?
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
15.08.2011, 00:02
я там обновлял код, проверьте
вы точно уверены что это ее идентификатор?
еще поставьте проверьте, что возвращает SetDlgItemText
ну и пройдитесь дебаггером чтоил
1
 Аватар для zewer
2356 / 1774 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
15.08.2011, 00:03  [ТС]
если запустить прогу с таким кодом, то при нажатие на кнопку ничего не происходит
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void CprogDlg::OnClickedButton1()
{
        double m[2];
        const size_t size_buffer = 50;
 
        TCHAR szBuff[size_buffer] = {2};
        const int nIdentifier[] = {IDC_EDIT1, IDC_EDIT2};
        bool bOk = true;
 
        for( unsigned i = 0 ; i<2 && bOk; ++i )
        {
          if( !GetDlgItemText(nIdentifier[i], szBuff, size_buffer) )
          {
             m[i] = _ttof( szBuff );
             if( !errno )
             {
                  bOk = false;             
             }
           }
           else
           {
                  bOk = false; 
           } 
        }
        if( bOk )
        {
             _stprintf_s( szBuff, size_buffer, _T("%f"), m[1] - m[2] );
             SetDlgItemText( IDC_EDIT3, szBuff );
        }
}
а если нажат на кнопку с таким кодом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
void CprogDlg::OnClickedButton1()
{
        double m[2];
        const size_t size_buffer = 50;
 
        TCHAR szBuff[size_buffer] = {0};
        const int nIdentifier[] = {IDC_EDIT1, IDC_EDIT2};
        bool bOk = true;
 
        for( unsigned i = 0 ; i<2 && bOk; ++i )
        {
          if( 0 != GetDlgItemText(nIdentifier[i], szBuff, size_buffer) )
          {
             m[i] = _ttof( szBuff );
             if( 0 != errno )
             {
                  // there isn't double
                  bOk = false;             
             }
           }
           else
           {
                  // there is empty pole
                  bOk = false; 
           } 
        }
        if( bOk )
        {
             _stprintf_s( szBuff, size_buffer, _T("%f"), m[1] - m[2] );
             SetDlgItemText( IDC_EDIT3, szBuff );
        }
}
то при нажатии кнопки вилазит ошибка, типу такого Bofer too small, если нид могу залить скрин
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
15.08.2011, 00:05
ну давайте
вы дебаггером пользоваться умеете?
0
 Аватар для zewer
2356 / 1774 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
15.08.2011, 00:25  [ТС]
ага, понял, ошибка вилазит из за цикла
я сменил на
C++
1
for( unsigned i = 1 ; i<10 && bOk; ++i )
кнопка нажимаеться тепер норм, но все равно результат не виводит, тоесть неактивна

Добавлено через 6 минут
Цитата Сообщение от alex_x_x Посмотреть сообщение
ну давайте
вы дебаггером пользоваться умеете?
да, шас смотрю, но долго ждать приходиться, пока компилятор все хедерние и спп файли пройдет

Добавлено через 11 минут
если я правильно увидел по дебагеру, то компилятор даже не входил в етот if
C++
1
2
3
4
5
if( bOk )
        {
             _stprintf_s( szBuff, size_buffer, _T("%f"), m[1] - m[2] );
             SetDlgItemText( IDC_EDIT3, szBuff );
        }
я так понял, именно поетому и не виводиться в 3 поле, потомучто он его не не проходить даже
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
15.08.2011, 00:27
там кстати еще m[0] - m[1]
впрочем пройдитесь от начала до конца функции дебагером
1
 Аватар для zewer
2356 / 1774 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
15.08.2011, 00:36  [ТС]
уряяяяяя
сделал так
в етом if поставил такое условие
C++
1
2
3
4
5
if( bOk = true )
        {
             _stprintf_s( szBuff, size_buffer, _T("%f"), m[0] - m[1] );
             SetDlgItemText( IDC_EDIT3, szBuff );
        }
и все заканало

Добавлено через 1 минуту
ну все Алекс, большое вам спасибо, ви меня скажем так спасли

Добавлено через 3 минуты
я заметил такое
C++
1
2
3
4
5
6
7
8
9
10
11
if( 0 != errno )
             {
                  // there isn't double
                  bOk = false;             
             }
           }
           else
           {
                  // there is empty pole
                  bOk = false; 
           }
ето ничего что 2 раза false стоит???
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
15.08.2011, 00:49
там вложенное условие
ну и вы все таки проверьте
0
 Аватар для zewer
2356 / 1774 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
15.08.2011, 00:49  [ТС]
Цитата Сообщение от alex_x_x Посмотреть сообщение
там вложенное условие
ну и вы все таки проверьте
говорю же, прога пашет коректно, там где else поставил вместо false true
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
15.08.2011, 08:18
Вообще, это всё следует делать через DDX, для чего он и существует. И не потребуется вручную строки в числа переводить и обратно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.08.2011, 08:18
Помогаю со студенческими работами здесь

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

Преобразовать 2 числа int в 1 число float(double) | double int1.int2
Всем привет. Изучая азы C++, столкнулся с такой проблемой. Есть два значения типа int, их необходимо преобразовать в одно значение типа...

Как мне программу с int переделать в Float i double?
как мне програму с int переделать в Float i double??? #include &lt;iostream&gt; using namespace std; int main() { cout...

Как преобразовать все int,float,double в строки LPWSTR, LPCTSTR
Столкнулся с проблемой не как не переведу в нормальный вид вот код #include &lt;iostream&gt; #include &lt;Windows.h&gt; ...

Какой тип данных лучше подойдет для приложения, которое делит числа int или float?
Ответ написал int Хотя нутром чую, что float


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru