Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
#1

Непонятный вывод - C++

06.07.2011, 22:46. Просмотров 973. Ответов 29
Метки нет (Все метки)

У меня есть следующий код функции на С++
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void CursorPosition(HWND hWnd, int xPosition, int yPosition, int xCell, int yCell, int sx, int sy) {
    int oneStepOnX = sx/8;
    int oneStepOnY = sy/8;
 
    TCHAR sumbolsChar[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H' };
    TCHAR sumbolsInt[] = { '1', '2', '3', '4', '5', '6', '7', '8' };
 
    TCHAR intPos;
    TCHAR charPos;
 
    intPos = sumbolsInt[xPosition/oneStepOnX];
    charPos = sumbolsChar[yPosition/oneStepOnY];
 
    TCHAR out[2];
    out[0] = intPos;
    out[1] = charPos;
 
    MessageBox(hWnd, out , _T("Координаты"), MB_OK);
}
В окно сообщений выводит правильные координаты, и потом разные китайские иероглифы. В отладчике видно, что переменные intPos и charPos имеют правильные значения. Но после их занесения в массив out они смешиваются с каким-то мусором. Почему??
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2011, 22:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Непонятный вывод (C++):

Непонятный вывод значений синуса - C++
Есть вот такой код: #include <iostream> #include <cmath> using namespace std; const double pi = 3.14159265358979; int...

Непонятный вывод структуры через функцию - C++
#include <cstdlib> #include <iostream> using namespace std; struct st { char name; char surname; int...

Непонятный вывод: постфиксные и префиксные инкремент/декремент - C++
Под спойлером весь который можно просто скопипастить и запустить в онлайн компиляторе http://www.compileonline.com/compile_cpp11_online.php...

Непонятный цикл - C++
for (int i = 0, r = n - 1; i < r; ++i, --r) Объясните пожалуйста, это 2 цикла в одном? Можно ли как нибудь попроще его записать?

Непонятный код - C++
#define HEX__(n) 0x##n##LU #define B8__(x) ((x&0x0000000FLU)?1:0)\ +((x&0x000000F0LU)?2:0)\ ...

Непонятный Код - C++
К какому языку относится следующий код: use Net::SSH2; my $user = "root"; my $pass = "yahh"; my $ip = "127.0.0.1"; my...

29
Mischanja
Всегда не хватает времени
118 / 118 / 7
Регистрация: 15.10.2009
Сообщений: 493
06.07.2011, 22:53 #2
C++
1
MessageBox(hWnd, out , _T("Координаты"), MB_OK);
попробуй на англ написать Координаты
0
zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
06.07.2011, 22:58  [ТС] #3
Он выводит в самом окне
0
Миниатюры
Непонятный вывод  
Bers
Заблокирован
06.07.2011, 22:58 #4
попробуйте сделать вот так:

Цитата Сообщение от zuq Посмотреть сообщение
TCHAR out[3];
out[0] = intPos;
out[1] = charPos;
out[3] = '\0';
0
Mischanja
Всегда не хватает времени
118 / 118 / 7
Регистрация: 15.10.2009
Сообщений: 493
06.07.2011, 22:59 #5
кинь проект
0
zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
06.07.2011, 23:00  [ТС] #6
Цитата Сообщение от Bers Посмотреть сообщение
попробуйте сделать вот так:
Тогда выводит два нужных символа, и один иероглиф
0
Bers
Заблокирован
06.07.2011, 23:02 #7
попробуйте тип char вместо TCHAR
0
zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
06.07.2011, 23:03  [ТС] #8
Пробовал - char нельзя засунуть в MessageBox()
0
Bers
Заблокирован
06.07.2011, 23:08 #9
Цитата Сообщение от zuq Посмотреть сообщение
робовал - char нельзя засунуть в MessageBox()
Ну я ж как то засовываю:

C++
1
2
3
4
5
6
char out[3];
    out[0] = '1';
    out[1] = '2';
    out[2] = '\0';
 
    MessageBox(NULL, out , "Координаты", MB_OK);
выведет в окошке 12

Добавлено через 36 секунд
на что он ругается, если сделать char ?
0
zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
06.07.2011, 23:14  [ТС] #10
Если написать, так как вы предложили
C++
1
2
3
4
5
6
char out[3];
    out[0] = '1';
    out[1] = '2';
    out[2] = '\0';
 
    MessageBox(NULL, out , "Координаты", MB_OK);
Код
1>d:\projects\test_win32\test_win32\test_win32.cpp(253): error C2664: MessageBoxW: невозможно преобразовать параметр 2 из "char [3]" в "LPCWSTR"
1>          Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
TCHAR out[3];
 out[0] = intPos;
 out[1] = charPos;
out[3] = '\0';
 
    MessageBox(hWnd, out , _T("Coordinates"), MB_OK);
}
С таким вариантом вскакивает окно сообщений и после нажатия ОК программа вылетает, ссылаясь на Run-Time Check Failure #2 - Stack around the variable 'out' was corrupted.
0
Bers
Заблокирован
06.07.2011, 23:17 #11
странно... вы в какой IDE пишите?

попробуйте вот так:

C++
1
2
3
4
5
6
   char out[3];
    out[0] = '1';
    out[1] = '2';
    out[2] = '\0';
 
    MessageBox(NULL, &out[0] , "Координаты", MB_OK);
0
zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
06.07.2011, 23:19  [ТС] #12
Все те-же ошибки
0
Bers
Заблокирован
06.07.2011, 23:19 #13
все, я понял. Если вы в студии - нужно поставить в конфигурации флажок "использовать многобайтную кодировку"

И потом спокойно пишите:


C++
1
2
3
4
5
6
    char out[3];
    out[0] = '1';
    out[1] = '2';
    out[2] = '\0';
 
    MessageBox(NULL, out , "Координаты", MB_OK);
1
zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
06.07.2011, 23:21  [ТС] #14
Да Все работает. Спасибо
0
schdub
2959 / 1304 / 239
Регистрация: 19.01.2009
Сообщений: 3,424
Завершенные тесты: 1
06.07.2011, 23:23 #15
Цитата Сообщение от Bers Посмотреть сообщение
нужно поставить в конфигурации флажок "использовать многобайтную кодировку"
// ...
char out[3];
Bers, многобайтовая кодировка это wchar_t или ?
0
06.07.2011, 23:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2011, 23:23
Привет! Вот еще темы с ответами:

Непонятный код? - C++
Подскажите, что выполняется в следующем коде и каким образом? int main() { char buf; while ( cout << "> " && cin >>...

C++. Непонятный символ - C++
Что означает символ "&" в языке C++? Например, void move(int &a,int b) Можете дать ссылку на справку про синтаксис...

Непонятный typedef - C++
typedef int (*LPMYDLLFUNC)(int,int); после данного typedef, LPMYDLLFUNC используется как указатель на функцию, принимающую два...

Непонятный синтаксис. - C++
В VC 2010 вместо int main(int argc, char *argv) написано int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpcmdline,...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru