我想让数字的输出总是有6位
e.g:
如何使用printf
/ sprintf
?
答案 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;
}
运行的代码