在printf / sprintf中尾随零

时间:2011-11-25 10:21:13

标签: c printf

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

e.g:

  • 如果number为1,则输出应为100000
  • 如果number为23,则输出应为230000
  • 如果number为236,则输出应为236000

如何使用printf / sprintf

执行此操作

5 个答案:

答案 0 :(得分:5)

printf及其变体可以向左填充零,而不向右填充。 sprintf数字,然后自己添加必要的零,或确保数字长度为6位数:

while(num < 100000) 
    num *= 10;

(此代码假定数字不是负数,或者您将遇到麻烦)

答案 1 :(得分:2)

printf将返回打印出来的字符数。这可以打印出剩余的零:

int num = 3; // init
int len = printf("%d", num);
for (int i = 0; i < 6-len; ++i)
    printf("0");

您应该添加一些错误检查(例如,如果len大于6)。

使用sprintf,您可以在剩余的缓冲区上使用memset,这将更容易。

答案 2 :(得分:0)

你无法直接使用printf(至少以符合标准的方式),你需要事先改变你的数字。

答案 3 :(得分:0)

正如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));

答案 4 :(得分:0)

使用printf的返回值(如下面for循环的第一行)

#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;
}

查看在http://ideone.com/TolIv

运行的代码