C標準庫參考指南系列譯文(6)locale.h

鍾超發表於2012-02-05

英文原文:http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.6.html

原文作者:Eric Huss

中文譯者:柳驚鴻 Poechant

版權宣告:本文的原文版權歸Eric Huss所有,中文譯文版權歸Poechant所有。轉載請註明來自"柳大的CSDN部落格":http://blog.csdn.net/poechant


6. locale.h

標頭檔案locale對設定具體位置資訊很有用。

變數:

struct lconv


巨集:


NULL

LC_ALL

LC_COLLATE

LC_CTYPE

LC_MONETARY

LC_NUMERIC

LC_TIME


函式:


localeconv();

setlocale();


6.1. Variables and Definitions

資料結構“lconv”包含下面這些成員變數。這個資料結構的使用,將在“6.3 localeconv”中描述。

char *decimal_point;

char *thousands_sep;

char *grouping;

char *int_curr_symbol;

char *currency_symbol;

char *mon_decimal_point;

char *mon_thousands_sep;

char *mon_grouping;

char *positive_sign;

char *negative_sign;

char int_frac_digits;

char frac_digits;

char p_cs_precedes;

char p_sep_by_space;

char n_cs_precedes;

char n_sep_by_space;

char p_sign_posn;

char n_sign_posn;


巨集“LC_”將會在6.2 setlocale中描述。“NULL”是空指標常量值。


6.2. setlocale

宣告:

char *setlocale(intcategory, const char *locale);


讀寫位置相關資訊。


category的可能值有:

LC_ALL

設定所有資訊。

LC_COLLATE

影響strcollstrxfrm函式。

LC_CTYPE

影響所有字元函式。

LC_MONETARY

影響由localeconv函式提供的貨幣資訊。

LC_NUMERIC

影響十進位制小數格式和localeconv函式提供的資訊。

LC_TIME

影響strftime函式。


"C"可以將locale置為正常的C翻譯環境設定(預設)。空值(即"")可將locale值為本地環境設定。空指標(NULL)會使“setlocale”函式返回一個指向與當前設定對應的category相關聯的字串的指標(不產生任何改變)。其他所有值由實現確定。

在成功設定後,setlocale函式會返回一個指向之前的位置資訊設定的字串。若失敗,則返回NULL。

例項:

#include<locale.h>

#include<stdio.h>


int main(void)

{

char *old_locale;


old_locale=setlocale(LC_ALL,"C");

printf("The preivous setting was %s.\n",old_locale);

return 0;

}


6.3. localeconv

宣告:

struct lconv *localeconv(void);


置“lconv”資料結構為當前的位置資訊設定。


在這個資料結構中的字串指標,可能指向一個空串(即""),這表明這個值是不可用的。字元型別都是非負整數。如果值為CHAR_MAX則這個值不可用。


lconv成員變數:

char *decimal_point

非貨幣值的十進位制數的小數點符號。

char *thousands_sep

非貨幣值的千位分隔符。

char *grouping

一個表明在非貨幣數量中每組大小的字串。每個字元代表一個整數值中相應數字組的大小。0值表示最前面的值也代表後面每個組的值。

char *int_curr_symbol

用於國際貨幣符號。前面的三個字元遵從ISO 4217:1987標準,第四個字元隔離貨幣符號和貨幣值。

char *currency_symbol

本地貨幣符號。

char *mon_decimal_point

貨幣值的十進位制數的小數點符號。

char *mon_thousands_sep

貨幣值的千位分隔符。

char *mon_grouping

grouping類似,但是是用於貨幣值的。

char *positive_sign

正貨幣值符號。

char *negative_sign

負貨幣值符號。

char int_frac_digits

國際貨幣值中,小數點後面的數字個數。

char frac_digits

貨幣值中,小數點後面的數字個數。

char p_cs_precedes

其中的cs表示currency symbol。如果該值取1的時候,currency_symbol出現在一個正貨幣值前面。如果該值取0的時候,currency_symbol出現在一個負貨幣值後面。

char p_sep_by_space

其中的sep表示separate。如果該值取1的時候,則用空格將currency_symbol和正貨幣值分隔開。如果該值取0,則不用空格將currency_symbol和正貨幣值分隔開。

char n_cs_precedes

p_cs_precedes類似,不過是針對負貨幣值的。

char n_sep_by_space

p_sep_precedes類似,不過是針對負貨幣值的。

char p_sign_posn

在正貨幣值中positive_sign的位置。

char n_sign_posn

在負貨幣值中negative_sign的位置。


下面這些值用於p_sign_posnn_sign_posn:

0

圓括號來包裹數值和貨幣符號。

1

符號放在數值和貨幣符號前。

2

符號放在數值和貨幣符號後。

3

符號直接放在貨幣符號前。

4

符號直接放在貨幣符號後。


例項:

#include<locale.h>

#include<stdio.h>

int main(void)

{

struct lconv locale_structure;

struct lconv *locale_ptr=&locale_structure;


locale_ptr=localeconv();

printf("Decimal point: %s",locale_ptr->decimal_point);

printf("Thousands Separator: %s",locale_ptr->thousands_sep);

printf("Grouping: %s",locale_ptr->grouping);

printf("International Currency Symbol: %s",locale_ptr->int_curr_symbol);

printf("Currency Symbol: %s",locale_ptr->currency_symbol);

printf("Monetary Decimal Point: %s",locale_ptr->mon_decimal_point);

printf("Monetary Thousands Separator: %s",locale_ptr->mon_thousands_sep);

printf("Monetary Grouping: %s",locale_ptr->mon_grouping);

printf("Monetary Positive Sign: %s",locale_ptr->positive_sign);

printf("Monetary Negative Sign: %s",locale_ptr->negative_sign);

printf("Monetary Intl Decimal Digits: %c",locale_ptr->int_frac_digits);

printf("Monetary Decimal Digits: %c",locale_ptr->frac_digits);

printf("Monetary + Precedes: %c",locale_ptr->p_cs_precedes);

printf("Monetary + Space: %c",locale_ptr->p_sep_by_space);

printf("Monetary - Precedes: %c",locale_ptr->n_cs_precedes);

printf("Monetary - Space: %c",locale_ptr->n_sep_by_space);

printf("Monetary + Sign Posn: %c",locale_ptr->p_sign_posn);

printf("Monetary - Sign Posn: %c",locale_ptr->n_sign_posn);

}

該系列譯文在持續更新中⋯⋯

C標準庫參考指南系列譯文(1)assert.h

C標準庫參考指南系列譯文(2)ctype.h

C標準庫參考指南系列譯文(3)errno.h

C標準庫參考指南系列譯文(4)float.h

C標準庫參考指南系列譯文(5)limits.h

C標準庫參考指南系列譯文(6)locale.h

C標準庫參考指南系列譯文(7)math.h

C標準庫參考指南系列譯文(8)setjmp.h

C標準庫參考指南系列譯文(9)signal.h

C標準庫參考指南系列譯文(10)stdarg.h

C標準庫參考指南系列譯文(11)stddef.h

C標準庫參考指南系列譯文(12)stdio.h(A)


版權宣告:本文的原文版權歸Eric Huss所有,中文譯文版權歸Poechant所有。轉載請註明來自"柳大的CSDN部落格":http://blog.csdn.net/poechant

-

相關文章