当前位置: C语言 -- 标准库 -- <locale.h> -- localeconv

localeconv函数


概要:
#include <locale.h>
struct lconv *localeconv(void);

描述:

该函数根据当前语言环境规则,使用适用于格式化数量(货币和其它)的值来设置struct lconv类型对象的成员。

实现应像没有库函数调用localeconv函数一样。


参数:
void

无。


返回值:

函数返回一个指向struct lconv类型对象的指针。程序不能修改该指针指向的对象,但后续localeconv函数调用可以覆盖该对象;此外调用setlocale函数(参数category值为LC_ALLLC_MONETARY或者LC_NUMERIC。)也可能覆盖该对象内容。


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
/*函数localeconv范例*/

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

/*输出struct lconv结构成员值的函数。*/
void printMember(const char *);

int main(void)
{
    const char *str = "zh-CN";
    printMember(str);
    
    return 0;
}

void printMember(const char *str)
{
    struct lconv *lc;

    /*设置语言环境。*/
    if(setlocale(LC_ALL, str) == NULL)
    {
        puts("Fail to change the program's current locale.");
        exit(EXIT_FAILURE);
    }
    printf("current locale: %s\n", str);

    lc = localeconv();

    /*输出struct lconv类型成员值。*/
    printf("decimal_point: %s\n", lc->decimal_point);
    printf("thousands_sep: %s\n", lc->thousands_sep);
    printf("grouping: %d\n", lc->grouping[0]);
    printf("mon_decimal_point: %s\n", lc->mon_decimal_point);
    printf("mon_thousands_sep: %s\n", lc->mon_thousands_sep);
    printf("mon_grouping: %d\n", lc->mon_grouping[0]);
    printf("positive_sign: %s\n", lc->positive_sign);
    printf("negative_sign: %s\n", lc->negative_sign);
    printf("currency_symbol: %s\n", lc->currency_symbol);
    printf("frac_digits: %d\n", lc->frac_digits);
    printf("p_cs_precedes: %d\n", lc->p_cs_precedes);
    printf("n_cs_precedes: %d\n", lc->n_cs_precedes);
    printf("p_sep_by_space: %d\n", lc->p_sep_by_space);
    printf("n_sep_by_space: %d\n", lc->n_sep_by_space);
    printf("p_sign_posn: %d\n", lc->p_sign_posn);
    printf("n_sign_posn: %d\n", lc->n_sign_posn);
    printf("int_curr_symbol: %s\n", lc->int_curr_symbol);
    printf("int_frac_digits: %d\n", lc->int_frac_digits);
}


输出:

current locale: zh-CN

decimal_point: .

thousands_sep: ,

grouping: 3

mon_decimal_point: .

mon_thousands_sep: ,

mon_grouping: 3

positive_sign:

negative_sign: -

currency_symbol: ¥

frac_digits: 2

p_cs_precedes: 1

n_cs_precedes: 1

p_sep_by_space: 0

n_sep_by_space: 0

p_sign_posn: 4

n_sign_posn: 4

int_curr_symbol: CNY

int_frac_digits: 2

注:使用Visual Studio编译。


截至程序编译时,visual studio编译器还未支持int_p_cs_precedesint_n_cs_precedesint_p_sep_by_spaceint_n_sep_by_spaceint_p_sign_posnint_n_sign_posn等结构成员,所以这里未对这些结构成员进行讨论。

结构成员grouping指向类似"\3"的字符串,\3是转义序列,值为3。如果输出字符,将输出编码值为3的字符;如果输出数值,将输出3。这里使用printf("grouping: %d\n", lc->grouping[0]);语句将会输出lc->grouping指向字符串中第一个字符的编码值。结构成员mon_grouping与结构成员grouping情况相似。


相关内容:
struct lconv 表示数值格式的类型。
setlocale 改变或者查询语言环境的函数。