C語言 '*' 在scanf函式和printf函式運用
阿新 • • 發佈:2018-12-20
1,在scanf函式中,加了' *' 的部分會被忽略掉(跳過),即你輸入的資料不會被對應的引數獲取。
下面舉個栗子
int a;
char b;
scanf("%*c%d",&b,&a);
輸入:12345 在不加 * 的情況下'1'會作為一個字元被變數b讀取並吸收,'2345'作為整形被變數a吸收;但是加了 * 之後,字元變數b被忽略,所以'1'被讀取之後就被拋棄,不賦予任何變數,只有'2345'被a吸收。
2,在printf函式中'*'表示用後面的引數替代' *'的位置,從而達到用變數控制輸出格式的效果。
其一: 在%d、%c和%s中效果一樣:都是表示輸出佔幾列的意思
int a=1,b=2,c=3,d=5;
printf("%*d\n",a,d); //輸出為5;等同於printf("%1d\n",d);
printf("%*d\n",b,d); //輸出為 5;等同於printf("%2d\n",d);
printf("%*d\n",c,d); //輸出為 5;等同於printf("%3d\n",d);//輸出佔 3列,不足空格補
其二: 說在%s中的另一種情況,首先要了解下面內容
printf("%3.7s",b); //表示輸出一個長度不小於3不大於7的字串
故
printf("%.*s",1,"abc"); //輸出a printf("%.*s",2,"abc"); //輸出ab printf("%.*s",3,"abc"); //輸出abc,注:當引數大於3時也為abc,因為字串遇到'\0'時會結束
3,擴充套件一下其他的
printf("%04d",a);//表示輸出一個小於4位的數值時,將前面補0使其寬度為4位
待續......