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

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

14.08.2011, 22:16. Показов 9372. Ответов 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
 Аватар для zewer
2357 / 1775 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
15.08.2011, 13:55  [ТС]
Студворк — интернет-сервис помощи студентам
вопрос: что такое DDX и как ним пользоваться, обяснять не надо, можно просто бросить ссилку где ето норм росписано, думаю сам пойму
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
15.08.2011, 14:02
Цитата Сообщение от zewer Посмотреть сообщение
что такое DDX и как ним пользоваться
Описание в любой книге по MFC. Обрати внимание на метод DoDataExchange.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
15.08.2011, 14:04
Цитата Сообщение от zewer Посмотреть сообщение
такая проблема у меня....
мне нужно в диалоге отнять 2 числа, если числа типу int, то написать било просто, а вот сделать так, чтоб пахало для double и float у меня не получаеться, подскажите что не так делаю
код програми
1 - кто мешает сделать тип эдитов double, в него влезут и инт и флоат???
2 - GetDlgItemText - это вообще извращение какое-то, т.к. едиту можно приписать тип и не изобретать велосипед, но если уж охота поковыряться с текстом делаем типы эдитов CString и конвертим их в нужный тип, например так

C++
1
double dif = atof(m_edit1) - atof(m_edit2);//Типы эдитов - CString
1
 Аватар для zewer
2357 / 1775 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
15.08.2011, 14:17  [ТС]
в доубл влезает инт, но не влезает флоат

Добавлено через 37 секунд
Цитата Сообщение от Deviaphan Посмотреть сообщение
Описание в любой книге по MFC. Обрати внимание на метод DoDataExchange.
у меня ни 1 книги по MFC, шас по гуглим тогда
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
15.08.2011, 14:17
Маленький проект в демонстрационных целях. Весь код вот
C++
1
2
3
4
5
6
7
8
9
void CPlus_minusDlg::OnOK() 
{
    // TODO: Add extra validation here
    UpdateData(true);
    m_edit5 = m_edit1 - m_edit2;
    m_edit6.Format("%lf",atof(m_edit3) - atof(m_edit4));
    UpdateData(false);
    //CDialog::OnOK();
}
Изображения
 
Вложения
Тип файла: rar plus_minus.rar (9.0 Кб, 11 просмотров)
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
15.08.2011, 14:23
В строке 5 эдиты имеют тип дабл - вводи любые числа, с запятой или без нё
В строке 6 данные ввожу как строки, которые потом atof преобразовываю к даблам и отнимаю друг от друга. Прие этом на переменных можно экономить, т.к. эдиты сами являются переменными и совсем не обязательно так писать
C++
1
2
3
4
double a = m_edit1;
double b = m_edit2;
double c = a - b;
m_edit3 = c;
Всё можно вместить в 1-ну строку
C++
1
m_edit3 = m_edit1 - m_edit2;
Добавлено через 2 минуты
Цитата Сообщение от alex_x_x Посмотреть сообщение
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
2357 / 1775 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
15.08.2011, 15:29  [ТС]
ето канешно супер, спасибо, тоесть мне нужно било всеголиш написать double a = ...
и компилятор считал ето за переменую типу double????
все так просто

Добавлено через 3 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
1 - кто мешает сделать тип эдитов double, в него влезут и инт и флоат???
2 - GetDlgItemText - это вообще извращение какое-то, т.к. едиту можно приписать тип и не изобретать велосипед, но если уж охота поковыряться с текстом делаем типы эдитов CString и конвертим их в нужный тип, например так

C++
1
double dif = atof(m_edit1) - atof(m_edit2);//Типы эдитов - CString
понятно, просто у меня в методичке делали через GetDlgItemText, поетому другого я не знал, так как только начал изучать
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
15.08.2011, 15:57
Цитата Сообщение от zewer Посмотреть сообщение
понятно, просто у меня в методичке делали через GetDlgItemText, поетому другого я не знал, так как только начал изучать
- значит её написал API препод садист, если что надо по Visual обращайся
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
15.08.2011, 16:27
Цитата Сообщение от zewer Посмотреть сообщение
тоесть мне нужно било всеголиш написать double a
Нет. Сперва нужно создать переменную m_edit типа double и связать её с контролом при помощи DDX. Методы UpdateData обращаются к механизму DDX для чтения/записи значений из/в контролы (в зависимости от передаваемого флага).

Добавлено через 52 секунды
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
значит её написал API препод садист
Её написал препод, не знающий MFC и пишущий на голом WinAPI.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
15.08.2011, 16:59
Цитата Сообщение от Deviaphan Посмотреть сообщение
Её написал препод, не знающий MFC и пишущий на голом WinAPI.
Цитата Сообщение от Deviaphan Посмотреть сообщение
Нет. Сперва нужно создать переменную m_edit типа double и связать её с контролом при помощи DDX.
- В MFC это всё занимеат два клика мыши, на счёт апи - экзешники немного меньше выходят но мозго**ства с объявлением MESSAGE MAP гемор с расстановкой контролов в окне, методами их вызова и создания, просто уводят в сторону от решения иногда совсем тривиальных задач. API надо юзать когда набил руку в MFC
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
15.08.2011, 17:13
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
API надо юзать когда набил руку в MFC
Да и тогда лучше использовать ATL, а не чистый WinAPI.)
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
15.08.2011, 22:59
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
тебе не кажется что неоправданно раздутый код?
я на мфс славу богу много лет не пишу, а тут все обыкновенные проверки, которые нужны

Добавлено через 13 минут
Хотя zewer, люди тебе правду говорят
0
 Аватар для zewer
2357 / 1775 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
15.08.2011, 23:37  [ТС]
да я понял уже
но у меня возник ище такой вопрос:
как мне записать результат програми в файл???
написал так:
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
33
34
35
void CprogDlg::OnClickedButton1()
{
        double m[2];
        const size_t size_buffer = 50;
 
        TCHAR szBuff[size_buffer] = {10};
        const int nIdentifier[] = {IDC_EDIT1, IDC_EDIT2};
        bool bOk = true;
 
        for( unsigned i = 0 ; i<3 && 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 = true; 
           } 
        }
        if( bOk = true )
        {
             _stprintf_s( szBuff, size_buffer, _T("%f"), m[0] - m[1] );
             SetDlgItemText( IDC_EDIT3, szBuff );
             ofstream file("1.txt");
             file<<m[0]<<","<<m[1]<<",";
        }
        
}
но ofstream подсвечиваеться красним, пишет:identifier "ofstream" is undefined
ну то что, компилятор не понимает что ето такое ето я понял, а как тогда записать????
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
15.08.2011, 23:47
C++
1
2
3
4
5
6
7
8
9
10
11
#include <fstream>
 
....
 
std::ofstream f( "1.txt" );
if( !f )
{
   // error open file
   return;
}
f << m[0] << ", " << m[1] << ", " m[0] - m[1];
1
 Аватар для zewer
2357 / 1775 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
16.08.2011, 00:39  [ТС]
точнее не в файл а в Блокнот, записать результат

Добавлено через 2 минуты
офстрим все равно подчеркиваеться красним и ошибка

Добавлено через 13 минут
все, уже розобрался, спасибо

Добавлено через 32 минуты
ище такой вопрос :
я создал диалог, создал прогаму(помагали xD), результат записал в файл, шас мне нужно создать однодокументну програму(уже создал), открить файл с результатом проги с диалога, что нибудь туда вписать, пофиг что, дальше сохранить файл, уже открить вручну и проверить, все ли хорошо там
что у меня получилось:
все до того пункта чтоб чтото вписать в файл
создал я файл, вписал у него например такое 2212232
сохранил файл и закрил
через однодокументну програму запустил, открил етот файл, а он пустой(в самом деле не пустой), ничего прописивать я не могу вобше, если тупо сохранить "пустой файл", то все дание сотруться, и файл уже действительно станет пустой
вопрос:
что не так делаю, смотрел на фирст степс, там вроде вобше только диалог и все
П.С. все делал так как в методичке, но в ней только указано как создать однодокументною програму и все, правда там ище чтото указано про функцию OnPaint...
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
16.08.2011, 12:31
Цитата Сообщение от zewer Посмотреть сообщение
через однодокументну програму запустил, открил етот файл, а он пустой(в самом деле не пустой)
-
1 -если ты отркрыл файл в режиме tranc или новой записи, то данные просто исчезли (вобщем обрати внимание на флаги доступа)
2 - если ты писал файл програмно, то вконце нужно его закрывать(Ofstream::close) иначе данные могут в него некоректно записаться и даже не записаться совсем
В этом примере нет закрытия потока, поэтому данные могли некоректно записаться

Цитата Сообщение от alex_x_x Посмотреть сообщение
#include <fstream>
....
std::ofstream f( "1.txt" );
if( !f )
{
* *// error open file
* *return;
}
f << m[0] << ", " << m[1] << ", " m[0] - m[1];
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
16.08.2011, 12:40
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
В этом примере нет закрытия потока, поэтому данные могли некоректно записаться
вы слышали, что существуют деструкторы? так вот стримы сами закрываются
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
16.08.2011, 12:57
Цитата Сообщение от alex_x_x Посмотреть сообщение
вы слышали, что существуют деструкторы? так вот стримы сами закрываются
- они работают исключительно при закрытии программы, если пишет и читает одно и тоже приложение, возможна кака, да и вообще закрывать поток всегда нужно!!!
0
 Аватар для zewer
2357 / 1775 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
16.08.2011, 13:03  [ТС]
я уже розобрался сам
ошибка била в том, что при создании однодокументной програми я использовал библиотеку UNICOD
поетому и она мне вовидали какуюту фигню на екран
тепер ище остался сделать с многодокументной програмой, но я ище е розбирался с ней, когда будут ище вопроси - то отпишу сдесь )
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
16.08.2011, 13:30
27.8.1.2 basic_filebuf constructors
[lib.filebuf.cons]
basic_filebuf ();
1 Effects: Constructs an object of class basic_filebuf<charT,traits>, initializing the base class with basic_-
streambuf<charT,traits>() (27.5.2.1).
2 Postcondition: is_open() == false.
virtual ~ basic_filebuf ();
3 Effects: Destroys an object of class basic_filebuf<charT,traits>. Calls close().
очевидно у std::ofstream есть член rdbuf специализация basic_filebuf
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.08.2011, 13:30

При вводе элементов массива выводить их тип (или 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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru