C语言printf("%*d %*d\n", strlen(b),strlen(a));

程序运行如图

显示字符,并在字符尾部和开头分别显示字符个数!代码:
#include <stdio.h>
#include<string.h>
int main (void)
{

char namea [20];
char nameb [20];
printf("你好,请输入你的名:");
scanf ("%s",namea);
printf("你好,请输入你的姓:");
scanf ("%s",nameb);
printf("%s,%s\n",namea,nameb);
printf("%*d %*d\n", strlen(nameb),strlen(nameb),strlen(namea),strlen(namea));
printf("%s,%s\n",namea,nameb);
printf("%-*d %-*d\n", strlen(nameb),strlen(nameb),strlen(namea),strlen(namea));
return 0;
}
其中不明白printf("%*d %*d\n", strlen(nameb),strlen(nameb),strlen(namea),strlen(namea)); 这段代码的用法,望高手解答下!!!

printf中 * 符号表示人为指定输出表达式的长度!

printf("%s,%s\n",namea,nameb); //1printf("%*d %*d\n", strlen(nameb),strlen(nameb),strlen(namea),strlen(namea)); //2

所以第二句的代码,是为了保证和第一句对齐。。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-13

    首先你得知道

    printf("%9d", 10);

    是以至少9个宽度输出10,若10输出超过9个宽度,正常输出,若不足9个,按照9个宽度右对齐

    以上控制宽度的是一个常量,当然也能用一个变量来控制,

    printf("%*d", 9, 10);

    第一个参数9就是控制宽度为9,输出的数字为10printf("%*d %*d\n", strlen(nameb),strlen(nameb),strlen(namea),strlen(namea));

    按照strlen(nameb)的宽度输出strlen(nameb)这个数字

    按照strlen(namea)的宽度输出strlen(namea)这个数字

追问

strlen(nameb),strlen(nameb),strlen(namea),strlen(namea)
那为什么这行代码strlen(nameb),strlen(namea)连续2次呢?

追答

和2个%*d对应

本回答被提问者和网友采纳
第2个回答  2014-12-08
pirntf里如果宽度设的是*的话,会用后面参数表里的数据作为宽度使用。pritnf("%10s", "123")和printf("%*s", 10, "123")是一个效果。