1. 程式人生 > >C語言 '*' 在scanf函式和printf函式運用

C語言 '*' 在scanf函式和printf函式運用

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位

待續......