显示用C分隔的整数逗号?

显示用C分隔的整数逗号?,c,C,如何显示用C分隔的整数逗号 例如,如果int i=9876543,结果应该是9876543。我相信没有内置函数。但是,您可以将整数转换为字符串,然后根据结果字符串的长度计算逗号位置(提示:第一个逗号位于strlen(s)%3位数之后,请避免前导逗号) 您可以使用LC\u NUMERIC和setlocale()或构建自己的函数,例如: #include <stdio.h> #include <stdlib.h> char *fmt(long x) { char s

如何显示用C分隔的整数逗号


例如,如果
int i=9876543
,结果应该是
9876543。

我相信没有内置函数。但是,您可以将整数转换为字符串,然后根据结果字符串的长度计算逗号位置(提示:第一个逗号位于
strlen(s)%3位数之后,请避免前导逗号)

您可以使用
LC\u NUMERIC
setlocale()
或构建自己的函数,例如:

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

char *fmt(long x)
{
    char s[64], *p = s, *q, *r;
    int len;

    len = sprintf(p, "%ld", x);
    q = r = malloc(len + (len / 3) + 1);
    if (r == NULL) return NULL;
    if (*p == '-') {
        *q++ = *p++;
        len--;
    }
    switch (len % 3) {
        do {
            *q++ = ',';
            case 0: *q++ = *p++;
            case 2: *q++ = *p++;
            case 1: *q++ = *p++;
        } while (*p);
    }
    *q = '\0';
    return r;
}

int main(void)
{
    char *s = fmt(9876543);

    printf("%s\n", s);
    free(s);
    return 0;
}
#包括
#包括
字符*fmt(长x)
{
字符s[64],*p=s,*q,*r;
内伦;
len=sprintf(p,“%ld”,x);
q=r=malloc(len+(len/3)+1);
如果(r==NULL)返回NULL;
如果(*p=='-'){
*q++=*p++;
蓝--;
}
开关(透镜%3){
做{
*q++=',';
案例0:*q++=*p++;
案例2:*q++=*p++;
案例1:*q++=*p++;
}而(*p);
}
*q='\0';
返回r;
}
内部主(空)
{
char*s=fmt(9876543);
printf(“%s\n”,s);
免费的;
返回0;
}

+1用于重新访问达夫的设备+我还没有找到一个适用于INT_MIN的答案,并且可以移植到“如何在C中格式化从1123456789到1123456789的数字?”。这两个答案似乎都是(除了神奇的数字64之外),“如何在C中设置从1123456789到1123456789的数字格式?”中的答案不提供可移植的答案,也不提供适用于所有
int
(int\u MIN对于许多人来说都失败)的答案。这里接受的答案是可移植的,适用于INT_MIN。