问题回答转自:http://zhidao.baidu.com/link?url=_-3fJi5zXvo2XDlWOqxSwtxgKAXWU_kVhvH2YUb2hcM2ibUaOFaFm64SJ5giY0IQzz-b4QOIuWR1KU0aj_-Y4K
看c primer plus的时候遇到一道编程题:
5.编写一个程序,首先要求用户输入名字,然后要求用户输入姓氏。在一行打印输入的姓名,在下行打印
每个名字中字母的个数。把字母个数与相应名字的结尾对齐,如下所示:
Melissa Honeybee
7 8
然后打印相同的信息,但是字母个数与相应单词的开始对齐。
#include <stdio.h> #include <string.h> int main(void) { char sumame[20],firstname[20]; printf("Please input your firstname and sumame."); scanf("%s",firstname); scanf("%s",sumame); printf("%s %s.\n",firstname,sumame); printf("%*d%*d\n",strlen(firstname),strlen(firstname),strlen(sumame), strlen(sumame)); return 0;
其中的strlen和*的意思:
printf("%*d%*d\n",strlen(firstname),strlen(firstname),strlen(sumame), strlen(sumame)); 这个是输出匹配的问题。 举个例子 printf("%5d",5); 就会给你5个空间输出5,前面4个空格,然后输出5. printf("%*d",5,5);和上面一样,利用*匹配5控制输出宽度。就是四个空格5. 同理上面的第一个strlen是作为输出宽度而存在的,也就是说给你字符串长度个空间,用于存放字符串长度的变量。 比如输入 we women 就相当于 printf("%*d%*d",2,2,5,5); 相当于 printf("%2d%5d",2,5);输出 【1个空格】2【4个空格】5