我在'var'递增的循环中使用%nd。现在我希望“ n”成为否。 'var'的位数,以便正确对齐
答案 0 :(得分:2)
您可以使用printf
宽度说明符在*
中将变量指定为width参数:
printf("%*d\n", digs, var);
这将使用digs
变量的值作为格式宽度。
一个简单而完整的示例:
#include <stdio.h>
int main()
{
for (int i = 1; i <= 10; ++i)
printf("%*d\n", i, i); // i is used both as the width specifier and the actual value printed!
}
答案 1 :(得分:0)
我可以通过在运行时使用sprintf()
生成所需的格式字符串来做到这一点,例如:
#include <stdio.h>
int main(int, char **)
{
char formatBuf[100];
for (int i=0; i<10; i++)
{
// Note: %% specifies one literal %
// %d specifies the width-number to put in the format string
// ... and the final d is a literal 'd' to include in the format string
sprintf(formatBuf, "num=%%%dd", i);
printf("formatBuf=[%s]\n", formatBuf);
printf(formatBuf, i);
printf("\n");
}
return 0;
}
...给出此输出作为演示:
formatBuf=[num=%0d]
num=0
formatBuf=[num=%1d]
num=1
formatBuf=[num=%2d]
num= 2
formatBuf=[num=%3d]
num= 3
formatBuf=[num=%4d]
num= 4
formatBuf=[num=%5d]
num= 5
formatBuf=[num=%6d]
num= 6
formatBuf=[num=%7d]
num= 7
formatBuf=[num=%8d]
num= 8
formatBuf=[num=%9d]
num= 9