我在看主题:How to format a number from 1123456789 to 1,123,456,789 in C?
所以我根据现有代码安装了我的代码。
void printfcomma(char *buf, const char* text int n) {
if (n < 1000) {
sprintf(buf, "%s %d", text, n);
return;
}
printfcomma(buf, n / 1000);
sprintf(buf, "%s ,%03d", text, n %1000);
return;
}
sprintf只返回最后3位数字。示例:,536
有没有人知道为什么他们没有显示其他数字
答案 0 :(得分:1)
你正在覆盖。
你应该sprintf(s+ strlen(s),"abcde");
void printfcomma(char *buf,int n) {
if (n < 1000) {
sprintf(buf+strlen(buf), "%d", n);
return;
}
printfcomma(buf, n / 1000);
sprintf(buf+strlen(buf), ",%03d", n %1000);
return;
}
调用函数
memset(s,0,sizeof(s));// s is the char array.
printfcomma(s,100000536);
100,000,536
答案 1 :(得分:0)
正如@coderredoc所述,代码覆盖了buf
。
调用strlen()
的替代方法是利用sprintf()
的返回值。
sprintf
函数返回写入数组的字符数,不计算终止空字符,如果发生编码错误,则返回负值。 C11dr§7.21.6.63
此外:代码也应处理负数。
const char* text
使用尚不清楚。下面的示例代码不使用它。
int printfcomma(char *buf, int n) {
if (n > -1000 && n < 1000) { // avoid (abs(n) < 1000) here. abs(INT_MIN) is a problem
return sprintf(buf, "%d", n);
}
int len = printfcomma(buf, n / 1000);
if (len > 0) {
len += sprintf(buf + len, ",%03d", text, abs(n % 1000)); // do not print `-`
}
return len;
}
用法
char s[sizeof(int)*CHAR_BIT]; // Somehow, insure buffer size is sufficient.
printfcomma(s, INT_MIN);
puts(s); --> -2,147,483,648