2012-12-20 237 views
0

在windows上使用C++,swprintf語言環境

試圖設置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); 

我需要得到千位分隔符,即3456

我還放置一個斷點看到locale變量的值,它包含了lconv結構與正確設置爲, ...然而,標準的swprintf千位分隔符正在無視它。

回答

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

那麼今天我做了測試在Windows(使用MinGW),這是不實現的... 請閱讀此鏈接,其中提供瞭解決方案http://c-faq.com/stdio/commaprint.html

+0

同樣的結果,語言環境有「,」你當我打破並觀看'語言環境',但是swprintf會忽略它:( –

+0

我使用廣泛的刺痛,'if(swprintf(buf,L'%'d',12345)> 0)'' 'd',而不是號碼 –

+0

感謝您的更新。我在Win32上使用C++。您的示例'「%d」'正在打印文字''d'並且沒有編號 –