C printf/sprintf中的尾随零

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

我想让一个数字的输出总是有6位数字

e、 g:

  • 如果数字为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;
}