Как напечатать число с плавающей точкой в ​​визуальном окне сообщения C ++? - PullRequest
2 голосов
/ 13 мая 2010

У меня есть число с плавающей точкой. Я хотел бы напечатать это в окне сообщения. Как это сделать?

MessageBox(hWnd, "Result = <float>", L"Error", MB_OK);

Обновление:

Я делаю это, и он печатает китайские иероглифы внутри окна сообщения.

 float fp = 2.3333f;
 sprintf(buffer,"%f",fp);
 MessageBox(hWnd, LPCWSTR(buffer), L"Error", MB_OK);

Ответы [ 3 ]

5 голосов
/ 13 мая 2010

Поскольку вы используете wchar_t версии Win32-функций, вы должны использовать swprintf вместо sprintf:

float fp = 2.3333f;
const size_t len = 256;
wchar_t buffer[len] = {};
swprintf(buffer, L"%f", fp);
MessageBox(hWnd, buffer, L"Error", MB_OK);

Чтобы избежать возможных переполнений буфера, вы также можете использовать _snwprintf:

float fp = 2.3333f;
const size_t len = 256;
wchar_t buffer[len] = {};
_snwprintf(buffer, len - 1, L"%f", fp);
MessageBox(hWnd, buffer, L"Error", MB_OK);

Или еще лучше, используйте std::wostringstream, объявленный в <sstream>:

float fp = 2.3333f;
std::wostringstream ss;
ss << fp;
MessageBox(hWnd, ss.str().c_str(), L"Error", MB_OK);
3 голосов
/ 13 мая 2010

Вы используете Unicode-версию MessageBox, поэтому вам нужно указать строку «Error» с префиксом L - это говорит о том, что она должна использовать широкие (16-битные) символы. Как сказал Далле, это означает, что вы должны указать буфер как wchar_t и использовать соответствующую версию wchar_t printf.

Вы увидите китайские символы, потому что они интерпретируют вашу строку байтов как строку wchar_t. В конце концов, вы явно приводите буфер в строку wchar_t.

1 голос
/ 13 мая 2010

Вы должны распечатать сообщение в буфер с кодом формата% f, а затем использовать его в MessageBox ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...