Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.06.2011, 10:50   #1
Alt_Shift
Пользователь
 
Аватар для Alt_Shift
 
Регистрация: 11.11.2010
Сообщений: 74
По умолчанию WINAPI привести int к строковому типу

Как правильно должен выглядеть код вида
Код:
case WM_LBUTTONDOWN:
int a=5;
userReply = MessageBox(hWnd,L"траливали"+(LPCWSTR)a, L"",MB_YESNOCANCEL | MB_ICONQUESTION);
вот так он матюкается на плюс и на переменную а
Цитата:
1>d:\шаг\winapi\kwnd\kwnd\hello.cpp (38) : error C2110: '+' : cannot add two pointers
1>d:\шаг\winapi\kwnd\kwnd\hello.cpp (48) : error C2361: initialization of 'a' is skipped by 'default' label
Alt_Shift вне форума Ответить с цитированием
Старый 25.06.2011, 11:24   #2
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Код:
case WM_LBUTTONDOWN:
int a=5;
WCHAR tmp[32];
wsprintf(tmp,L"траливали %d",a);
userReply = MessageBox(hWnd,tmp, L"",MB_YESNOCANCEL | MB_ICONQUESTION);
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 25.06.2011, 11:35   #3
Alt_Shift
Пользователь
 
Аватар для Alt_Shift
 
Регистрация: 11.11.2010
Сообщений: 74
По умолчанию

так он ругается, что инициализация "а" пропускается
Цитата:
error C2361: initialization of 'a' is skipped by 'default' label
Alt_Shift вне форума Ответить с цитированием
Старый 25.06.2011, 11:40   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ставьте блоки внутри веток если нужны разные переменные в ветках.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.06.2011, 11:50   #5
Alt_Shift
Пользователь
 
Аватар для Alt_Shift
 
Регистрация: 11.11.2010
Сообщений: 74
По умолчанию

я WinApi начал учить только-только, и не совсем понимаю слова "блоки" и "ветки"
Alt_Shift вне форума Ответить с цитированием
Старый 25.06.2011, 12:16   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

это С++, а не винапи.
винапи лишь функции, но не язык.
Код:
case WM_LBUTTONDOWN:
{
    int a=5;
    WCHAR tmp[32];
    wsprintf(tmp,L"траливали %d",a);
    userReply = MessageBox(hWnd,tmp, L"",MB_YESNOCANCEL | MB_ICONQUESTION);
    //...
    break;
}
у вас switch, ветка кода case WM_LBUTTONDOWN(или просто WM_LBUTTONDOWN), в ней делаем блок(фигурные скобки) для личных переменных ветки.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.06.2011, 12:59   #7
Alt_Shift
Пользователь
 
Аватар для Alt_Shift
 
Регистрация: 11.11.2010
Сообщений: 74
По умолчанию

Пепел спасибо ! Вопрос- для чего служит переменная WCHAR tmp[32]? И для чего %d ?
Alt_Shift вне форума Ответить с цитированием
Старый 25.06.2011, 13:05   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
переменная WCHAR tmp[32]?
ну строку то надо где то хранить?
Цитата:
И для чего %d ?
спецификатор форматирования, d от decimal, целое числе в десятичном формате.
указание функции что первый(в данном случаем он первый по счету) аргумент это целое число, и надо вывести его в десятичном формате.

подробнее тут
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.06.2011, 20:25   #9
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

А теперь - безопасный с точки зрения переполнения буфера и совместимости типов вариант
И правильный с точки зрения использования настроек Unicode (((Ж

Код:
#include <string>
#include <sstream>

...

case WM_LBUTTONDOWN:
{
    int a=5;

    std::wstringstream wss;
    wss << L"траливали ";
    wss << a;

    const std::wstring tmp = wss.str();

    userReply = MessageBoxW(hWnd, tmp.c_str(), L"", MB_YESNOCANCEL | MB_ICONQUESTION);
    //...
    break;
}
Rififi вне форума Ответить с цитированием
Старый 25.06.2011, 20:57   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а еще правильно с точки зрения С++
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
функция float average(int arrray[],int from,int to) yuliyayuliya Помощь студентам 0 25.04.2011 21:55
С++:invalid types 'int[int]' for array subscript greendoom Помощь студентам 0 19.03.2011 16:53
Привести матрицу к единичной lexatigrenok Помощь студентам 1 13.03.2011 18:01
С++ Опереатор перезагрузки ()(int,int) Jane-sad Помощь студентам 1 08.10.2010 15:26
Привести в живность код student_63 Помощь студентам 1 29.11.2007 02:01