C printf/sprintf中的尾随零
我想让一个数字的输出总是有6位数字 e、 g:C printf/sprintf中的尾随零,c,printf,C,Printf,我想让一个数字的输出总是有6位数字 e、 g: 如果数字为1,则输出应为100000 如果数字为23,则输出应为230000 如果数字为236,则输出应为236000 如何使用printf/sprintf?printf及其变体可以将零填充到左侧,而不是右侧。冲刺数字,然后自己添加必要的零,或确保数字长度为6位: while(num < 100000) num *= 10; while(num
- 如果数字为1,则输出应为100000
- 如果数字为23,则输出应为230000
- 如果数字为236,则输出应为236000
如何使用
printf
/sprintf
?printf及其变体可以将零填充到左侧,而不是右侧。冲刺数字,然后自己添加必要的零,或确保数字长度为6位:
while(num < 100000)
num *= 10;
while(num<100000)
num*=10;
(此代码假定数字不是负数,否则您会遇到麻烦)您不能直接使用
printf
(至少以符合标准的方式),您需要事先更改数字。printf
将返回打印出的字符数。您可以打印出剩余的零:
int num = 3; // init
int len = printf("%d", num);
for (int i = 0; i < 6-len; ++i)
printf("0");
int num=3;//初始化
int len=printf(“%d”,num);
对于(int i=0;i<6-len;++i)
printf(“0”);
您应该添加一些错误检查(例如,如果len
大于6)
使用
sprintf
,您可以在剩余的缓冲区上使用memset
,这将更容易。正如Luchian所说,与更常见的反向(左)填充不同,这种行为在printf
中不受支持。
但是,您可以很容易地通过以下方式生成请求的结果:
char *number_to_six_digit_string(char *resulting_array, int number)
{
int current_length = sprintf(resulting_array, "%d", number);
while (6 > current_length) {
resulting_array[current_length++] = '0';
}
resulting_array[current_length] = '\0';
return resulting_array;
}
然后你可以打印结果:
char my_number[7];
printf("my number is %s, other stuff\n", number_to_six_digit_string(my_number, 13));
使用
printf
的返回值(如下循环的第一行所示)
#包括
内部主(空){
整数,宽度=6;
用于(数字=1;数字<9999999;数字*=7){
整数位数=printf(“%d”,数字);
如果(数字<宽度)printf(“%0*d”,宽度数字,0);
认沽权(“”);
}
返回0;
}
请参阅在处运行的代码,而不是循环,如果(len>=0&&len<6)printf(“000000”+len),则可以执行
这很容易修复:虽然((num<1000000)和(num>-1000000))
,但更重要的是,数字必须是32位或更高的整数,short
或char
不能保存这些类型的值。
#include <stdio.h>
int main(void) {
int number, width = 6;
for (number = 1; number < 9999999; number *= 7) {
int digits = printf("%d", number);
if (digits < width) printf("%0*d", width-digits, 0);
puts("");
}
return 0;
}