1

WindowsでC ++を使用し、

swprintf 関数で使用するロケールを設定しようとしています。

印刷される数字に千区切り記号を含める必要があります。

私はいくつかのオプションを試しました...

_wsetlocale(LC_NUMERIC, L""); //default locale

また..

_wsetlocale(LC_NUMERIC, L"english");

そしてもちろん..

swprintf(buf, L"%d", 3546);

私も次のように番号を表示しようとしました

auto locale = _get_current_locale();
_swprintf_l(buf, L"%d", locale, 3546);

3,456 などの千単位の区切り記号を取得する必要があります

localeまた、変数の値を確認するためにブレークポイントを配置しました。これにはlconv、千単位の区切り記号が正しく設定された構造体が含まれてい,ます...ただし、swprintfはそれを無視しています。

4

1 に答える 1

0

Linux でテスト済み

それを試してください:

setlocale(LC_NUMERIC, "en_US.ISO8859-1");

例 :

#include <stdio.h>
#include <time.h>
#include <locale.h>

int main(void)
{
        setlocale(LC_NUMERIC, "en_US.iso88591");
        printf("%'d (%s)\n", 12345, setlocale(LC_NUMERIC, NULL));
        return 0;
}

あなたは'使用を逃しており、そうでは%'dありません%d

まだwcharで作業しています

#include <stdio.h>
#include <time.h>
#include <locale.h>
#include <wchar.h>

int main(void)
{
        setlocale(LC_NUMERIC, "en_US.iso88591");
        wprintf(L"%'d\n", 12345);
        return 0;
}

もう一つの例 :

#include <stdio.h>
#include <time.h>
#include <locale.h>
#include <wchar.h>

int main(void)
{
        wchar_t buf[32];
        setlocale(LC_NUMERIC, "en_US.iso88591");
        swprintf(buf, 32, L"%'d", 12345);
        wprintf(L"%ls\n", buf);
        return 0;
}

ウィンドウズ

さて、今日はWindowsで(mingwを使用して)テストしましたが、これは実装されていません...解決策を提供するこのリンクを読んでくださいhttp://c-faq.com/stdio/commaprint.html

于 2012-12-20T18:03:19.070 に答える