說明:小數點“.”後面的“*”表示輸出位數,具體的數據來自參數表。 printf格式字元串中,與寬度控制和精度控制有關的常量都可以換成變數,方法就是使用一個“*”代替那個常量,然後在後面提供變數給“*”。 同樣,小數點“.”前面也可以添加“*”,也要用戶輸入一個位寬值來代替,表示輸出的字元所占位寬。 ...
1 #include<stdio.h> 2 int main(){ 3 int a,b,c; 4 while(scanf("%d%d%d",&a,&b,&c) != EOF &&(a || b || c)){ 5 printf("%.*lf\n",c,a*1.0/b); 6 } 7 return 0; 8 }
說明:小數點“.”後面的“*”表示輸出位數,具體的數據來自參數表。
printf格式字元串中,與寬度控制和精度控制有關的常量都可以換成變數,方法就是使用一個“*”代替那個常量,然後在後面提供變數給“*”。
同樣,小數點“.”前面也可以添加“*”,也要用戶輸入一個位寬值來代替,表示輸出的字元所占位寬。
1 #include<stdio.h> 2 int main(){ 3 char *str = "this is test example"; 4 int a,b; 5 printf("%.*s\n",10,str);//這裡的常量10就是給*號的,也可以用一個變數來控制寬度 6 printf("%*.*s\n",20,10,str);//常量20控制輸出所占位寬,也可以用一個變數控制 7 scanf("%d%d",&a,&b); 8 printf("%*.*s\n",a,b,str); 9 return 0; 10 }
輸出結果:
1 this is te 2 this is te 3 15 10 4 this is te
註:printf的一般形式為printf("格式控制字元串",輸出列表),格式控制字元串形式為:[標誌][輸出最小寬度][精度][長度]類型。
其中方括弧中的項為可選項。各項的意義介紹如下:
1)類型:類型字元用以表示輸出數據的類型,其格式符和意義如下表所示:
d 以十進位形式輸出帶符號整數(正數不輸出符號)
o 以八進位形式輸出無符號整數(不輸出首碼 0)
x,X 以十六進位形式輸出無符號整數(不輸出首碼 Ox)
u 以十進位形式輸出無符號整數
f 以小數形式輸出單、雙精度實數
e,E 以指數形式輸出單、雙精度實數
g,G 以%f 或%e 中較短的輸出寬度輸出單、雙精度實數
c 輸出單個字元
s 輸出字元串
2)標誌:標誌字元為-、+、#、空格四種,其意義下表所示:
- 結果左對齊,右邊填空格
+ 輸出符號(正號或負號)
空格 輸出值為正時冠以空格,為負時冠以負號
# 對 c,s,d,u類無影響;對 o 類,在輸出時加首碼 o;對 x 類,在輸出時加首碼 0x;對 e,g,f 類當結果有小數時才給出小數點
3)輸出最小寬度:用十進位整數來表示輸出的最少位數。 若實際位數多於定義的寬度,則按實際位數輸出,若實際位數少於定義的寬度則補以空格或 0。
4)精度:精度格式符以“.”開頭,後跟十進位整數。本項的意義是:如果輸出數字,則表示小數的位數;如果輸出的是字元,則表示輸出字元的個數;若實際位數大於所定義的精度數,則截去超過的部分。
5)長度:長度格式符為 h,l 兩種,h 表示按短整型量輸出,l 表示按長整型量輸出。