看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