如何将实际变量n放入printf(“%nd”,var)而不是C中的任何整数?

时间:2019-09-04 18:09:20

标签: printf

我在'var'递增的循环中使用%nd。现在我希望“ n”成为否。 'var'的位数,以便正确对齐

2 个答案:

答案 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