英文原文: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 |
影响strcoll和strxfrm函数。 |
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_posn和n_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);
}
该系列译文在持续更新中⋯⋯
版权声明:本文的原文版权归Eric Huss所有,中文译文版权归Poechant所有。转载请注明来自"柳大的CSDN博客":http://blog.csdn.net/poechant
-