printf scanf格式控制符的完整格式

2021-06-21 15:14:50 字數 3735 閱讀 6671

printf的格式控制的完整格式:

%  -  0  m.n  l或h  格式字元

下面對組成格式說明的各項加以說明:

①%:表示格式說明的起始符號,不可缺少。

②-:有-表示左對齊輸出,如省略表示右對齊輸出。

③0:有0表示指定空位填0,如省略表示指定空位不填。

④m.n:m指域寬,即對應的輸出項在輸出裝置上所佔的字元數。n指精度。用於說明輸出的實型數的小數字數。為指定n時,隱含的精度為n=6位。

⑤l或h:l對整型指long型,對實型指double型。h用於將整型的格式字元修正為short型。

---------------------------------------

格式字元

格式字元用以指定輸出項的資料型別和輸出格式。

①d格式:用來輸出十進位制整數。有以下幾種用法:

%d:按整型資料的實際長度輸出。

%md:m為指定的輸出欄位的寬度。如果資料的位數小於m,則左端補以空格,若大於m,則按實際位數輸出。

%ld:輸出長整型資料。

②o格式:以無符號八進位制形式輸出整數。對長整型可以用"%lo"格式輸出。同樣也可以指定字段寬度用「%mo」格式輸出。

例:main()

執行結果:-1,177777

程式解析:-1在記憶體單元中(以補碼形式存放)為(1111111111111111)2,轉換為八進位制數為(177777)8。

③x格式:以無符號十六進製制形式輸出整數。對長整型可以用"%lx"格式輸出。同樣也可以指定字段寬度用"%mx"格式輸出。

④u格式:以無符號十進位制形式輸出整數。對長整型可以用"%lu"格式輸出。同樣也可以指定字段寬度用「%mu」格式輸出。

⑤c格式:輸出乙個字元。

⑥s格式:用來輸出乙個串。有幾中用法

%s:例如:printf("%s", "china")輸出"china"字串(不包括雙引號)。

%ms:輸出的字串佔m列,如字串本身長度大於m,則突破獲m的限制,將字串全部輸出。若串長小於m,則左補空格。

%-ms:如果串長小於m,則在m列範圍內,字串向左靠,右補空格。

%m.ns:輸出佔m列,但只取字串中左端n個字元。這n個字元輸出在m列的右側,左補空格。

%-m.ns:其中m、n含義同上,n個字元輸出在m列範圍的左側,右補空格。如果n>m,則自動取n值,即保證n個字元正常輸出。

⑦f格式:用來輸出實數(包括單、雙精度),以小數形式輸出。有以下幾種用法:

%f:不指定寬度,整數部分全部輸出並輸出6位小數。

%m.nf:輸出共佔m列,其中有n位小數,如數值寬度小於m左端補空格。 

%-m.nf:輸出共佔n列,其中有n位小數,如數值寬度小於m右端補空格。

⑧e格式:以指數形式輸出實數。可用以下形式:

%e:數字部分(又稱尾數)輸出6位小數,指數部分佔5位或4位。

%m.ne和%-m.ne:m、n和」-」字元含義與前相同。此處n指資料的數字部分的小數字數,m表示整個輸出資料所佔的寬度。

⑨g格式:自動選f格式或e格式中較短的一種輸出,且不輸出無意義的零。

---------------------------------------

關於printf函式的進一步說明:

如果想輸出字元"%",則應該在「格式控制」字串中用連續兩個%表示,如:

printf("%f%%", 1.0/3);

輸出0.333333%。

---------------------------------------

對於單精度數,使用%f格式符輸出時,僅前7位是有效數字,小數6位.

對於雙精度數,使用%lf格式符輸出時,前16位是有效數字,小數6位.

由高手指點

對於m.n的格式還可以用如下方法表示(例)

char ch[20];

printf("%*.*s/n",m,n,ch);

前邊的*定義的是總的寬度,後邊的定義的是輸出的個數。分別對應外面的引數m和n 。我想這種方法的好處是可以在語句之外對引數m和n賦值,從而控制輸出格式。

一種輸出格式 %n 可以將所輸出字串的長度值賦紿乙個變數, 見下例:

int slen;

printf("hello world%n", &slen);

執行後變數被賦值為11 

scanf格式控制的完整格式:

%  *  m  l或h  格式字元

①格式字元與printf函式中的使用方式相同,以%d、%o、%x、%c、%s、%f、%e,無%u格式、%g格式。

②可以指定輸入資料所佔列寬,系統自動按它擷取所需資料。如:

scanf(「%3d%3d」,&a,&b);

輸入:123456

系統自動將123賦給a,456賦給b。

③%後的「*」附加說明符,用來表示跳過它相應的資料。例如:

scanf(「%2d%*3d%2d」,&a,&b);

如果輸入如下資訊:1234567。將12賦給a,67賦給b。第二個資料」345」被跳過不賦給任何變數。

④輸入資料時不能規定精度,例如:

scanf(「%7.2f」,&a);

是不合法的,不能企圖輸入:12345.67而使a的值為12345.67。

------------------相關-------------------

輸入資料流分隔

①根據格式字元的含義從輸入流中取得資料,當輸入流中資料型別與格式字元要求不符時,就認為這一項結束。如:

scanf(「%d%c%f」,&a,&b,&c);

如果輸入如下資訊:

1234r1234.567

則scanf函式在接收資料時發現」r」型別不匹配,於是把」1234」轉換成整型賦值給a,把」r」賦給變數b,最後把」1234.567」轉換成實型資料賦給c。

②根據格式項中指定的域寬分隔出資料項。如語句:scanf(「%2d%3f%4f」,&a,&b,&c);

如果輸入如下資訊:

123456789012345

則scanf函式在接收資料時根據域寬把12賦值給a,345賦值給b,6789賦值給c。

③隱示分隔符。空格、跳格符(』/t』)、換行符(』/n』)都是c語言認定的資料分隔符。

④顯示分隔符。在scanf函式的兩個格式說明項間有乙個或多個普通字元,那麼在輸入資料時,在兩個資料之間也必須以這乙個或多個字元分隔。如語句:

scanf(「a=%d,b=%f,c=%f」,&a,&b,&c);

則輸入資料應該為:

a=1234,b=67.8,c=98.123

---------------------------------------

關於scanf函式的進一步說明:

①scanf函式中的「格式控制」後面應當是變數位址,而不應是變數名。例如,如果a、b為整型變數,則

scanf(「%d,%d」,a,b);

是不對的,應將」a,b」改為」&a,&b」。

②如果在「格式控制」字串中除了格式說明以外還有其它字元,則在輸入資料時應輸入與這些字元相同的字元。例如:

scanf(「%d,%d」,&a,&b);

輸入時應輸入:3,4。3與4之間的逗號應與scanf函式中的「格式控制」中的逗號相對應,輸入其它符號是不對的。

③在用「%c」格式輸入字元時,空格字元和轉義字元都作為有效字元輸入。

scanf(「%c%c%c」,&c1,&c2,&c3);

如輸入:a b c 。字元』a』賦給c1,字元(空格)』 』賦給c2,字元』b』 賦給c3。

④ scanf  中不使用u說明符.對unsigned型資料用d、o、x說明符輸入.

printf scanf格式控制符的完整格式

printf的格式控制的完整格式 0 m.n l或h 格式字元 下面對組成格式說明的各項加以說明 表示格式說明的起始符號,不可缺少。有 表示左對齊輸出,如省略表示右對齊輸出。0 有0表示指定空位填0,如省略表示指定空位不填。m.n m指域寬,即對應的輸出項在輸出裝置上所佔的字元數。n指精度。用於說明...

Printf Scanf 使用詳解

翻閱筆記系列 看以前的筆記,感覺就是 我以前還了解過這個。printf 輸出 xx printf 2f 123456 printf 2f 12.3456 指定 m.n格式 printf 5.3d 123 123 printf 5.3d 12 012 printf 5.3d 1234 1234 pri...

重學C語言 printf,scanf

printf 用來顯示格式串的內容 注意 引數不可以換行,否則會出乙個警告。格式串中佔位符比表示式數量多 會顯示乙個無意義值 格式串中佔位符比表示式數量少 只顯示佔位符的值 轉換說明符格式 m.px m.px m 最小字段寬度,要顯示的最小字元數量,要顯示的字元數量小於m 右對齊 前置空格 如果要顯...