C语言中输入输出格式控制
1、C語(yǔ)言中,非零值為真,真用1表示;零值為假,假用0表示。
2、轉(zhuǎn)義字符參考:
| \a | 蜂鳴,響鈴? | \b | 回退:向后退一格 |
| \f | 換頁(yè)? | \n | 換行 |
| \r | 回車(chē),光標(biāo)到本行行首? | \t | 水平制表 |
| \v | 垂直制表? | \\ | 反斜杠 |
| \' | 單引號(hào)? | \" | 雙引號(hào) |
| \? | 問(wèn)號(hào)? | \ddd | 三位八進(jìn)制? |
| \0 | 空字符(NULL),什么都不做 | \xhh | 二位十六進(jìn)制 |
說(shuō)明:
1)\v垂直制表和\f換頁(yè)符對(duì)屏幕沒(méi)有任何影響,但會(huì)影響打印機(jī)執(zhí)行響應(yīng)操作。
2),\n其實(shí)應(yīng)該叫回車(chē)換行。換行只是換一行,不改變光標(biāo)的橫坐標(biāo);回車(chē)只是回到行首,不改變光標(biāo)的縱坐標(biāo)。
注:
????文本文件的行結(jié)束符,傳統(tǒng)上(MS)PC用?CRLF,蘋(píng)果Mac用CR,unix?用?LF。
????CR --?回車(chē)符,c語(yǔ)言'\r'
????LF --?換行符, c語(yǔ)言'\n'
????不同計(jì)算機(jī)上c語(yǔ)言統(tǒng)一規(guī)定為:文本文件的行結(jié)束符一律變成一個(gè)符號(hào)LF,也就是換行符'\n'。“回車(chē)和換行符轉(zhuǎn)換成一個(gè)換行符”,對(duì)PC(MS OS)而言,文本文件行結(jié)束符CRLF讀入后,丟掉CR,留LF。例如fgets()?讀入一行,行尾只有LF,沒(méi)有CR。
3)\t光標(biāo)向前移動(dòng)四格或八格,可以在編譯器里設(shè)置
4)\'在字符里(即單引號(hào)里)使用。在字符串里(即雙引號(hào)里)不需要,只要用 '即可。
3、格式化輸入輸出
1)格式化輸入
printf("格式串" [,表達(dá)式1,表達(dá)式2,···]);
其中,格式串的字符有兩類(lèi):
①?以%開(kāi)頭引導(dǎo)的格式符,用于控制表達(dá)式的輸出格式(有多少個(gè)表達(dá)式,就有多少個(gè)格式符);
②?非格式符:原樣顯示在屏幕上。
(1)字符串常量的輸出
??? 無(wú)表達(dá)式,格式串中無(wú)格式符,如:
??? printf("We are students.\n");
(2)格式符的語(yǔ)法
syntax: %[flag][width][.precision][h|l|L]type
a)[h|l|L]type
type字段采用一個(gè)英文字母來(lái)表達(dá)數(shù)據(jù)類(lèi)型與格式:???
| d? | 按十進(jìn)制有符號(hào)整數(shù)形式輸出 |
| i? | 按十進(jìn)制有符號(hào)整數(shù)形式輸出(同d格式) |
| u | 按十進(jìn)制無(wú)符號(hào)數(shù)形式輸出 |
| o | 按八進(jìn)制無(wú)符號(hào)數(shù)形式輸出 |
| x | 按十六進(jìn)制無(wú)符號(hào)數(shù)形式輸出,輸出時(shí)使用小寫(xiě)字母?(a, b, c, d, e, f) |
| X | 按十六進(jìn)制無(wú)符號(hào)數(shù)形式輸出,輸出時(shí)使用大寫(xiě)字母(A, B, C, D, E, F) |
| f | 按十進(jìn)制小數(shù)形式輸出浮點(diǎn)數(shù),輸出格式為:[-]ddd.dddddd(默認(rèn)輸出6位小數(shù)) |
| e | 按十進(jìn)制指數(shù)形式輸出浮點(diǎn)數(shù),輸出格式為:[-]d.dddde[+/-]ddd,(e后面是指數(shù)) |
| E | 按十進(jìn)制指數(shù)形式輸出浮點(diǎn)數(shù),輸出格式為:[-]d.ddddE[+/-]ddd,(E后面是指數(shù))。 用e和E格式輸出浮點(diǎn)數(shù)時(shí),輸出的是科學(xué)記數(shù)法形式,即小數(shù)點(diǎn)前面的整數(shù)部分固定為1位整數(shù) |
| g | 按十進(jìn)制形式輸出浮點(diǎn)數(shù),自動(dòng)選擇f或e格式中,輸出長(zhǎng)度小的格式輸出;g格式不輸出無(wú)用的0。 |
| G | 按十進(jìn)制形式輸出浮點(diǎn)數(shù),自動(dòng)選擇f或E格式中,輸出長(zhǎng)度小的格式輸出;G格式不輸出無(wú)用的0。 |
| c | 輸出單個(gè)字符 |
| s | 輸出字符串 |
| p | 輸出void指針,輸出格式是:WIN32編程模式,只有XXXXXXXX一種格式 |
| % | 輸出字符%(%用于引導(dǎo)格式控制符,在格式串中輸出%號(hào)時(shí),必須采用格式%%) |
前綴修飾符:
L:?輸出long double類(lèi)型表達(dá)式必加
l:?輸出長(zhǎng)整型表達(dá)式必加
h:?輸出短整型表達(dá)式必加
b)[width]
??? width字段用來(lái)指定輸出的數(shù)據(jù)項(xiàng)占用的字符列數(shù),也稱(chēng)為輸出域?qū)挕H笔≡撟侄?#xff0c;輸出寬度按數(shù)據(jù)的實(shí)際位數(shù)輸出;如果指定的輸出寬度小于數(shù)據(jù)的實(shí)際位數(shù),則突破域?qū)挼南拗?#xff0c;按實(shí)際位數(shù)輸出;如果指定的域?qū)挻笥跀?shù)據(jù)的實(shí)際位數(shù),則默認(rèn)在輸出數(shù)據(jù)的左邊輸出空格,使輸出的字符數(shù)等于列寬,也就是說(shuō),輸出的數(shù)據(jù)在輸出域中自動(dòng)向右對(duì)齊。
width有以下三種情況:
| n | 一個(gè)非負(fù)整型常數(shù),指定輸出占用n列寬度。 |
| 0n | n為一個(gè)整型常數(shù),輸出占用n列,如果實(shí)際位數(shù)不足n列,數(shù)據(jù)前面補(bǔ)0,填滿n列 |
| * | 輸出域?qū)拋?lái)自待輸出表達(dá)式前面的一個(gè)整型表達(dá)式。 |
printf("%*d", 8+1, -3);
c)[.precesion]
????? 有以下4種情況:
| 缺省 | 對(duì)于f |e|E格式,表示小數(shù)點(diǎn)后輸出6位小數(shù),對(duì)于g |G格式,表示最多輸出6位有效數(shù)字 |
| .m | m為非負(fù)整型常數(shù),對(duì)于浮點(diǎn)格式,指定小數(shù)點(diǎn)后面輸出m位小數(shù); s格式,表示只輸出字符串的前面m個(gè)字符 |
| .0 | 對(duì)于f |e|E格式,表示不輸出小數(shù)點(diǎn)和小數(shù),按整數(shù)形式輸出 |
| .* | 表示precision來(lái)自待輸出表達(dá)式前面的一個(gè)整型表達(dá)式 |
示例
View Code?| #include "iostream" #include "stdio.h" using?namespace?std; ?? int?main() { ????double?a=12.578,b=0.2572; ????int?n=9,m=4; ????printf("%.2f,%10.2E,%f,%e,%10g",a,a,a,a,a); ????printf("\n"); ????printf("a=%.0f,a=%*.*f",a,n,m,a); ????printf("\n"); ????printf("%.2f%%",b*100); ????printf("\n"); ????printf("%s%6s%6.3s","ABCD",?"ABCD",?"ABCD"); ????return?1; } |
注意,輸出中任何一個(gè)字符都算作一位。
d)[flag]
| 缺省 | 輸出正數(shù)時(shí)不輸出正號(hào);域?qū)挻笥跀?shù)據(jù)實(shí)際位數(shù)時(shí),域中左邊補(bǔ)空格,數(shù)據(jù)靠右對(duì)齊; |
| + | 輸出正數(shù)時(shí)要輸出正號(hào); |
| - | 域?qū)挻笥跀?shù)據(jù)實(shí)際位數(shù)時(shí),域中右邊補(bǔ)空格,數(shù)據(jù)靠左對(duì)齊。 |
| # | 用于x |X格式:輸出0x(格式x)或0X(格式X)。 |
1、格式化輸入函數(shù)scanf
用法: scanf("格式串" ,地址1,地址2,···);
1)格式符
syntax: %[*][width][h|l|L]type
(1) [h|l|L]type
| d | 以十進(jìn)制有符號(hào)整數(shù)形式轉(zhuǎn)換輸入數(shù)據(jù) |
| i | 以十進(jìn)制有符號(hào)整數(shù)形式轉(zhuǎn)換輸入數(shù)據(jù)(同d格式) |
| u | 以十進(jìn)制無(wú)符號(hào)整數(shù)形式轉(zhuǎn)換輸入數(shù)據(jù) |
| o | 以八進(jìn)制有符號(hào)整數(shù)形式轉(zhuǎn)換輸入數(shù)據(jù) |
| x |X | 以十六進(jìn)制有符號(hào)整數(shù)形式轉(zhuǎn)換輸入數(shù)據(jù)(x和X等效) |
| e|E|f|g|G? | 以十進(jìn)制浮點(diǎn)數(shù)形式轉(zhuǎn)換輸入數(shù)據(jù),輸入數(shù)據(jù)時(shí),可以輸入整型常量、小數(shù)形式實(shí)型常量或指數(shù)形式實(shí)型常量。 |
| c?? | 輸入一個(gè)字符(可輸入控制字符) |
| s?? | 輸入字符串(遇到第一個(gè)空格、TAB或換行符結(jié)束轉(zhuǎn)換) |
前綴修飾符:
L:?輸入long double類(lèi)型變量必加
l:?輸入長(zhǎng)整型變量或者double型變量必加
h:?輸入短整型變量必加
(2) [width]
width字段用來(lái)指定輸入數(shù)據(jù)的轉(zhuǎn)換寬度,它必須是一個(gè)十進(jìn)制非負(fù)整型常量。width表示讀入多少個(gè)字符就結(jié)束本數(shù)據(jù)項(xiàng)的轉(zhuǎn)換。如果沒(méi)有指定width,則遇到空格 、TAB鍵、回車(chē)/換行符、非法輸入則結(jié)束數(shù)據(jù)項(xiàng)的轉(zhuǎn)換(%c格式除外)。
float a;int b;double c;
scanf("%f%3x%lf",&a,&b,&c);
若輸入為:-1.5A8059?
則a=-1.5, b=0xA80, c=59.0
(3) [*]號(hào)
??? 表示數(shù)據(jù)輸入項(xiàng)要按指定格式進(jìn)行轉(zhuǎn)換,但不保存變量,即該%沒(méi)有對(duì)應(yīng)的變量。
??? 一般用%*c來(lái)吸收字符。
2、幾點(diǎn)說(shuō)明:
????? 編譯程序只是檢查printf?函數(shù)的調(diào)用形式,不分析格式控制字符串,如果格式字符與輸出項(xiàng)的類(lèi)型不匹配,不進(jìn)行類(lèi)型轉(zhuǎn)換。(輸出的數(shù)為隨機(jī))
????? 格式字符要用小寫(xiě)字母。
????? 格式控制字符串中可以包含轉(zhuǎn)義字符。
????? 格式控制字符串中的普通字符則原樣輸出。
????? 輸出項(xiàng)的參數(shù)除了常數(shù)、變量外還可以是表達(dá)式、函數(shù)調(diào)用。
總結(jié)
以上是生活随笔為你收集整理的C语言中输入输出格式控制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C89与C99标准比较
- 下一篇: scanf中的%[^\n]%*c格式