Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/27: Рейтинг темы: голосов - 27, средняя оценка - 4.56
5 / 5 / 2
Регистрация: 24.01.2013
Сообщений: 76

sprintf

11.06.2013, 11:53. Показов 5258. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот код:

C++ (Qt)
1
2
sprintf(msg, "WX=%d  WY=%d  WZ=%d", WX,WY,WZ);  //msg получается "МММ"
sprintf(msg, "WX=%f  WY=%d  WZ=%c", WX,WY,WZ);  //тоже msg получается "МММ"
помогите пожалуйста, как можно решить эту ошибку
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.06.2013, 11:53
Ответы с готовыми решениями:

Табуляция sprintf при TextOut
Пытался сделать так: sprintf(text, "Objects:\t%d", objectsCount); TextOutA(hdc, x, y, text, strlen(text)) Но не вышло. Табуляции как...

Что лучше применить: sprintf или strcat и strcpy?
Win7, CodeBlocks, C++, Win32 API, ResEd. Писал программу, использовал sprintf(cVar1, "%s", cVar2) и sprintf(cVar1, "%s%s",...

Вызов sprintf для типа не соответствующего формату
Какова реакция sprintf на передачу в нее значения с типом не соответствующим указанному в формате (UB не предлагать :) )? К примеру есть...

11
 Аватар для BeginerMan
51 / 50 / 14
Регистрация: 17.11.2012
Сообщений: 427
11.06.2013, 13:19
покажи , чему у тебя ровно и ваще что то такое msg,WX,WY,WZ
0
5 / 5 / 2
Регистрация: 24.01.2013
Сообщений: 76
11.06.2013, 15:28  [ТС]
BeginerMan,
это int параметры
C++ (Qt)
1
2
3
4
5
6
7
8
int WX, WY, WZ;
WX=1200;
WY=900;
WZ=1800; //это не важно
 я раньше работал с sprintf но только в консоли, а в winapi проблемы
 
После этого: sprintf(msg, "WX=%d  WY=%d  WZ=%d", WX,WY,WZ);
msg принимает значение "МММММММ" (длина. конечно же зависит от размера массива      char msg[5]        )
0
 Аватар для BeginerMan
51 / 50 / 14
Регистрация: 17.11.2012
Сообщений: 427
11.06.2013, 15:45
Если у тебя msg[5] - попробуй сделать больше. там 30 хотябы.
и вместо %d попробуй %i - разницы нет , но всё же.
Где-то уже рассматривалась эта проблема , сейчас попробую поискать.
0
5 / 5 / 2
Регистрация: 24.01.2013
Сообщений: 76
11.06.2013, 16:29  [ТС]
BeginerMan, я попробовал поставить с,s,f -они не помогают, (i тоже не помогает)
msg[30] тоже не помогает.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
11.06.2013, 16:44
HyPuK, по-моему, Вы что-то не договариваете...
0
5 / 5 / 2
Регистрация: 24.01.2013
Сообщений: 76
11.06.2013, 18:34  [ТС]
Убежденный, Я учился на Си и вот это мне не нравиться:
C++ (Qt)
1
std::cout << &Buff[0] << std::endl;
и я не хочу это применить в winApi (мне же координаты надо указать), а так сделал как у вас (у меня так и было), но не работает.
А может есть другие способы вывести на экран (int+обозначения)?
Спасибо
0
 Аватар для BeginerMan
51 / 50 / 14
Регистрация: 17.11.2012
Сообщений: 427
11.06.2013, 18:39
Скинь весь твой код -_- в WinAPI
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
11.06.2013, 18:52
Цитата Сообщение от HyPuK Посмотреть сообщение
Убежденный, Я учился на Си и вот это мне не нравиться:
Не нравится ? Нет проблем !
0
5 / 5 / 2
Регистрация: 24.01.2013
Сообщений: 76
11.06.2013, 19:20  [ТС]
BeginerMan,
Убежденный, Вот код:


C++ (Qt)
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#include <windows.h>
#include <math.h> 
#include <tchar.h> 
# include <stdio.h>
# include <conio.h>
# include <stdlib.h>
 
 
 
/*  Declare Windows procedure    Объявляем Windows, процедуры */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
 
/*  Make the class name into a global variable   Сделать класс имя в глобальной переменной */
char szClassName[] = "WindowsApp";
//char szWindowClass[] = "WindowsApp";
TCHAR szWindowClass[] = L"WindowsApp";
 
HINSTANCE hIn;
 
 
 
 
 
//Размеры экрана!!!
int WX= GetSystemMetrics(SM_CXSCREEN);
int WY= GetSystemMetrics(SM_CYSCREEN);
 
 
 
 
 
int WINAPI WinMain (HINSTANCE hThisInstance,                 // Основная программа 
                    HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)
 
{
    HWND hwnd;               /* This is the handle for our window                                                Это ручка для нашего окна * /*/
    MSG messages;            /* Here messages to the application are saved                                      Здесь сообщения в приложении сохраняются*/
    WNDCLASSEX wincl;        /* Data structure for the windowclass                                              Структура данных для WindowClass*/
 
    /* The Window structure                                                                                                   Структуры окна*/
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szWindowClass;    //szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows                                    Эта функция вызывается из окна*/
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks                                                    Поймайте дважды щелкает */
    wincl.cbSize = sizeof (WNDCLASSEX);
 
hIn = hThisInstance;
 
    /* Use default icon and mouse-pointer                                   Использование по умолчанию значок и указателя мыши */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu                                 Нет меню*/
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class                                    Установка дополнительных байтов после класса окна*/
    wincl.cbWndExtra = 0;                      /* structure or the window instance                                     структуру или экземпляр окна*/
    /* Use Windows's default color as the background of the window                                    Использование цвета по умолчанию для Windows в качестве фона окна*/
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
 
    /* Register the window class, and if it fails quit the program                                    Регистрация класса окна, а если это не удается выйти из программы*/
    if (!RegisterClassEx (&wincl))
        return 0;
 
    /* The class is registered, let's create the program                                       Класс зарегистрирован, давайте создадим программу*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation                                   Расширенные зависим для изменения */
           szWindowClass,         /* Classname                                     Имя класса*/
           L"WindowsApp",       /* Title Text                                  Название Текст*/
           WS_POPUP,  //WS_CLIPCHILDREN, //WS_BORDER,            //WS_OVERLAPPEDWINDOW, /* default window                                  окна по умолчанию*/
           CW_USEDEFAULT,       /* Windows decides the position                                  Windows определяет позицию*/
           CW_USEDEFAULT,       /* where the window ends up on the screen                                  где окно заканчивается на экран*/
           WX,             //WX & WY это размеры экрана!!!     //544,                 /* The programs width                                          ширина программ*/
           WY,              //375,                 /* and height in pixels                                  и высоту в пикселях*/
           HWND_DESKTOP,        /* The window is a child-window to desktop                                 окно дочернего окна на рабочий стол*/
           NULL,                /* No menu                                 Нет меню*/
           hThisInstance,       /* Program Instance handler                                 обработчик экземпляра программы*/
           NULL                 /* No Window Creation data                                  Нет данных создание окна*/
           );
 
    /* Make the window visible on the screen                                 Сделать окно видимым на экране*/
    ShowWindow (hwnd, nFunsterStil);
 
    /* Run the message loop. It will run until GetMessage() returns 0                                    Запуск цикла обработки сообщений. Он будет работать, пока GetMessage () не возвращает 0 */
  
    
    /* while (GetMessage (&messages, NULL, 0, 0))
    {
        // Translate virtual-key messages into character messages                                 Перевести виртуальной клавиши сообщений в характере сообщений
        TranslateMessage(&messages);
        // Send message to WindowProcedure                                 Отправить сообщение для WindowProcedure
        DispatchMessage(&messages);
    }
 
    //The program return-value is 0 - The value that PostQuitMessage() gave                                     Программа возвращаемого значения - от 0 до значения, которое PostQuitMessage () дал 
    return messages.wParam; */
 
      // Стандартный цикл обработки сообщений
    while ( GetMessage( &messages, NULL, 0, 0 ) ) 
    {
        TranslateMessage( &messages );
        DispatchMessage( &messages );
    }
    return static_cast< int >( messages.wParam );
}
 
 
 
 
 
 
HDC hDC;
 
 
 
float F(float u)
{ 
return  2*(cos(u)-1);
}
 
 
 
 
 
 
 
 
 
 
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 
 
 
    int x,y;
 
    char msg[30];
    
 
PAINTSTRUCT ps;
HDC hDC;
 
        
    switch (message)                  /* handle the messages                                                   для поддержки сообщений*/
    {
 
 
case WM_PAINT:
 
    hDC=BeginPaint(hwnd,&ps);
 
    sprintf(msg, "WX=%d  WY=%d ", WX,WY);                 
    TextOutW(hDC, 150, 50, msg, 10);
 
 
    
 
    SetPixel(hDC, 440, 260, RGB(0, 0, 255));
 
     EndPaint(hwnd,&ps);
     break;
        case WM_DESTROY:
            PostQuitMessage (0);      
            break;
        default:                     
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
 
    return 0;
}
Добавлено через 4 минуты
Убежденный, я же писал, что с printf на консоли работал, тогда было все нормально, а в WinApi сам не могу понять
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
11.06.2013, 19:29
C
1
2
sprintf(msg, "WX=%d  WY=%d ", WX,WY);
TextOutW(hDC, 150, 50, msg, 10);
Ну теперь все понятно.
sprintf работает со строкой char-ов (1 байт на символ).
TextOutW - со строкой wchar-ов (2 байта на символ).
0
5 / 5 / 2
Регистрация: 24.01.2013
Сообщений: 76
17.06.2013, 17:38  [ТС]
Решил следующем образом :
C++ (Qt)
1
2
3
4
int a=123;
char msg[3];
sprintf (msg," %d", a)
TextOutA(hdc,  5, 5, msg, strlen(msg));
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.06.2013, 17:38
Помогаю со студенческими работами здесь

sprintf и %
wsprinfA(buff,&quot;%dasda&quot;); как сделать так, что бы этот код работал ? экранирование % не помогает = \ Добавлено через 1 минуту ...

Sprintf
Первый круг проходит спокойно, а на втором ошибку выбивает, но я не могу найти где я ошибся: char Random2and4(char ***Massive) { ...

sprintf() и wchar_t
Имеется структура с параметрами wchar_t *, её параметры необходимо пропустить через sprintf. Вроде как уже выяснил, что функция может...

засада со sprintf
int i; char *str1; char *str2 str1 = &quot;OBS&quot;; str2 = &quot;DEF&quot;; i = strlen(str1); sprymtf(&amp;str1, &quot;+%s&quot;,...

Sprintf и классы
Уважаемые, нужна помощь. Есть следующий класс: class tText { public: char *text; int x; int y; float R, G, B, A;...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru