c c 格式化列印

2021-09-12 10:59:08 字數 2762 閱讀 6458

筆記:

%o,八進位制列印

%x, 十六進製制,a-e代表11到15

%x,十六進製制,a-e代表11到15

%i , 有符號十進位制,同%d

列印不同資料型別時的格式:

關於這部分的內容,自己每次用的時候都是去翻書,或者上網查,但是一直沒有發現一篇文章很系統的介紹這一部分的內容,直到讀完了《c陷阱與缺陷》,在附錄中總結了格式化輸入輸出的符號,及其修飾符,今天暫且根據該書整理了簡單格式型別部分,後續的修飾符會另寫總結,本文旨在便於筆者查閱和方便各位博友。 

簡單格式型別: 

格式字串中的每個格式項都是由乙個%符號打頭,後面接乙個稱為格式碼的字元,格式碼指明了格式轉換的型別。 

首先最常用的就是%d, 以10進製列印乙個整數。例如: 

c** 

printf(「2 + 2 = %d\n」, 2 + 2);  

將列印出dos** 

2 + 2 = 4.  

%u格式項與%d類似,不同之處是%u列印無符號10進製整數。例如: 

c** 

printf(「%u\n」,-37);  

將列印出4294967259. 

%o, %x, %x用於列印8進製或者16進製制的整數。 

%x, 用小寫字母a, b, c, d, e, f來表示10到15的數字值 

%x, 用大寫字母a, b, c, d, e, f來表示10到15的數字值。 

例如: 

c** 

int n = 108;  

printf( 「%d decimal = %o octal = %x hex = %x hex \n」, n, n, n, n);  

將列印出: 

dos** 

108 decimal = 154 octal = 6c hex = 6c hex  

%s 用於列印乙個字串:與之對應的引數應該是乙個字元指標,指向待輸出的字串首字元的位址,知道遇見乙個空字元』\0』才終止。%s格式項所對應輸出的字串必須以乙個空字元』\0』作為結束標誌。 因為printf函式要一次來定位乙個字串何時結束。如果與%s對應的字串並不是以空字元』\0』作為結束標誌,那麼printf函式將不斷列印出其後面的字元,直到在記憶體中某處找到乙個空字元』\0』為止。這時輸出就可能相當的長。 

例如: 

c** 

printf (「there %s %d item%s in the list. \n」, n!=1? 「are」: 「is」, n, n!=1? 「s」: 「」);  

如果n為37,輸出將是: 

dos** 

there are 37 items in the list.  

如果n為1, 輸出將是 

dos** 

there is 1 item in the list.  

注: c** 

printf(s);  

與 c** 

printf(」%s」, s);  

兩者含義並不相同,前者把字串s中的任何%字元視為乙個格式項的標誌,其後的字元會被視為格式碼,如果除%%之外的任何格式碼在字串**現,而後面有沒有對應的引數,將會帶來麻煩。而後者將會列印出任何一空字元結尾的字串。 

null指標並不指向任何實際的記憶體位置,因此肯定也不可能指向乙個字串。因此, 

printf(「%s \n」, null); 

的結果將難以預料。 

%c 用於列印單個字元: 

c** 

printf(「%c」, c);  

等效於 

putchar(c); 

但是前者的適應性和靈活性更好,能夠把字元c的值嵌入某個更大的上下文中。與%c格式項對應的引數是乙個為了列印輸出而被轉換為字元型的整型值。例如: 

c** 

printf( 「the decimal equivalent of 『%c』 is %d \n」, 『*』, 『*』);  

將列印出: 

dos** 

the decimal equivalent of 『*』 is 42.  

%g, %e, %f這3個格式項用於列印浮點值。 

%g 去掉數字尾綴的0,保留6位有效數字。因此, 

c** 

printf(「%g %g %g %g %g %g\n」, 1/1.0, 1/2.0, 1/3.0, 2/3.0, 1/4.0, 0.0);  

將列印出 

1         0.5  0.333333  0.666667(四捨五入)  0.25  0 

如果乙個數的絕對值大於999999, 按%g的格式列印這個字元,會採用科學計數法來列印,例如: 

c** 

printf(「%g\n」, 123456789.0);  

將列印出: 

1.23457e+08 

對於很小的數值,除非該數的指數小於或等於-5, %g格式項才會採用科學計數法表示。因此: 

c** 

printf(「%g %g %g\n」, 3.14159e-3, 3.14159e-4, 3.14159e-5);  

將列印出: 

0.00314159  0.000314159    3.14159e-05 

%e和%f格式則在用於列印浮點數是,分別要求一律顯式地使用指數形式和禁止使用指數來表示浮點數。例如: 

c** 

printf( 「%e %f」, 123456789, 123456789)  

將列印出: 

dos** 

1.234567e+08  123456789.000000  

格式化列印(二)

printf語句可以規定輸出域的寬度和對齊方式。乙個格式表示式由3個可選的修飾符組成,跟在 後面,並出現在格式說明符之前。width.precision format specifier 描述輸出字段寬度的width是乙個數值。當指定域寬度時,這個域的內容預設為向右對齊。必須指定 來設定左對齊。因此...

php列印pre,php 列印格式化顯示利器

當我們php除錯的時候,用var dump 或 print r列印json資料或array陣列時,html頁面沒有換行顯示,看到的內容一大堆,不好定位。輸出前新增 便可以自動格式化換行顯示。print r 比如列印陣列 print r arr 輸出 array 0 array volume id10...

C C 字串格式化

與scanf 類似,但scanf 以鍵盤為輸入,但sscanf 以固定字串為輸入源 int sscanf char buffer,const char format,argument format 乙個或多個 type t n 非 符號 表示跳過此資料不讀入,如 d s 遇到整數不讀入 遇到字串不讀...