C++之printf函數

背景

C++中可以使用cout來輸出。
但是cout輸出一些格式化的數據非常麻煩。

比如:

hour,min和sec代表當前時間,需求:按12:00:00格式輸出當前時間。

//使用cout輸出
cout<<hour<<":"<<min<<":"<<sec<<endl;

問題:

  1. 這樣輸出比較麻煩,代碼的閱讀性也不高。
  2. 如果min是個位數,前面不方便加0。

Printf示例

//使用printf輸出上面的問題
print("%d:%0.2d:%0.2d",hour,min,sec);

解釋:

上面代碼在熟悉時候閱讀性高。
printf的第一個參數是字符串,字符串表示輸出格式。
%d表示數據,從第2個參數開始,依次替換字符串中的%d。
%0.2d表示,如果數據是個位數,依舊輸出兩位數(在前面加0)。

Printf詳解

從上面的例子可以看到,變量負責存儲數據。
但是有的時候,同樣的數據我們希望得到不同格式的輸出。比如早上七點01分,使用cout就會變成7:1,我們希望得到的是7:01。
所以變量負責存儲數據,printf負責格式輸出。(同樣的值可以得到不同格式輸出)。

整數

佔位符
%d  //輸出十進制
%o  //輸出無符號整數的八進制
%x  //輸出無符號整數的十六進制(字母小寫)
%X	//輸出無符號整數的十六進制(字母大寫)
格式
%5d		//輸出寬度爲5(右對齊)
%-5d	//輸出寬度爲5(左對齊)
%+5d	//輸出寬度爲5(輸出符號)
%05d	//輸出寬度爲5(前面補0,而不是空格)
%#o		//輸出八進制前的0(進制前的標識符)
%#x		//輸出十六進制前的0x(進制前的標識符)
舉例

例1:

int a=12;
printf("%d\n",a);       //輸出12

例2:

int a=12;
printf("%o\n",a);       //輸出14(因爲十進制的12等於八進制的14)

例3:

int a=12;
printf("%x\n",a);       //輸出c(因爲十進制的12等於十六局進制的c)

例4:

int a=12;
printf("%5d\n",a);       //輸出"   12"(默認右對齊,總共5個佔位,前面補空格)

例5:

int a=12;
printf("%-5d\n",a);     //輸出"12   "(負號表示左對齊,總共5個佔位,後面補空格)

例6:

int a=-12;
printf("%+5d\n",a);     //輸出"  -12"(正號表示輸出符號,而不是在前面加"+")

例7:

//%02d表示輸出寬度爲2,不足2則在前面補0。比如表示時間的時候:
int hour=12,min=3,sec=2;
printf("%02d:%02d:%02d\n",hour,min,sec);    //輸出"12:03:02"

小數

佔位符
%f		//輸出小數(保留到小數點後6位)
%e,E	//科學計數法,保留到小數點後6位(1.234560e+02)
%g,G	//以%f或%e中較短的輸出寬度輸出小數
格式
%10f	//輸出寬度爲10(多出不會被截斷)
%10.3f	//輸出寬度爲10(保留到小數點後3位)
舉例

例1:

float a=1.2;
printf("%f\n",a);       //輸出1.200000

例2-科學計數法:

float a=1234567;
printf("%e\n",a);   //輸出1.234567e+06
//%e和%E分別表示用小寫和大寫的e表示

例3

當我們不知道變量用什麼方式表示時,可以用%g表示。
比如,1.2如果用科學計數法來表示會非常繁瑣:1.200000e+00
再比如,1234567用%f也會繁瑣:1234567.000000
那麼,用%g就能自動判斷,以更好的方式表示。

float a=1234567,b=1.2;
printf("a=%g\n",a);     //輸出a=1.23457e+06
printf("b=%g\n",b);     //輸出b=1.2

char

佔位符
%c		//輸出單個字符
%s		//輸出字符串
舉例

例1:

int a=65;
printf("%d\n",a);       //輸出65
printf("%c\n",a);       //輸出A

例2:

char * a="張三";
printf("我的名字是%s\n",a);     //輸出"我的名字是張三"

指針

%p		//輸出指針指向的地址

舉例:

int a=10;
int *p=&a;
printf("變量a的地址爲%p\n",p);      //輸出"變量a的地址爲0x7ffeefbff54c"

其他

%%		//輸出%

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章