天天看點

《C++語言入門經典》一2.3 資料的輸入與輸出

在使用者與計算機互動的過程中,資料輸入和資料輸出是必不可少的操作過程,計算機需要

通過輸入擷取來自使用者的操作指令,并通過輸出來顯示操作結果。本節将介紹資料輸入與輸出

的相關内容。

c++語言中保留了c語言中的螢幕輸出函數printf。使用printf可以将任意數量和類型的資料

輸出到螢幕。

printf函數的作用是向終端(輸出裝置)輸出若幹任意類型的資料。printf函數的一般格

式為:

printf(格式控制,輸出清單)

括号内包括格式控制和輸出清單兩部分。

(1)格式控制

格式控制是用雙引号引起來的字元串,也稱為轉換控制字元串。其中包括兩種字元,一種

是格式字元,另一種是普通字元。

格式字元用來進行格式說明,其作用是将輸出的資料轉化為指定的格式輸出。格式字

符以“%”字元開頭。

普通字元是需要原樣輸出的字元,其中包括雙引号内的逗号、空格和換行符。

(2)輸出清單

輸出清單中列出的是要輸出的一些資料,也可以是變量或表達式。

例如,要輸出一個整型變量時,可以用下面的語句:

執行上面的語句顯示出來的字元是“this is 10”。在格式控制雙引号中的字元是“this is

%d”,其中的“this is”字元串是普通字元,而“%d”是格式字元,表示輸出的是後面iint 的

資料。

由于printf是函數,“格式控制”和“輸出清單”都是函數的參數,是以printf函數的一般

形式也可以表示為:

printf(參數1,參數2,…,參數n)

函數中的每一個參數按照給定的格式和順序依次輸出。例如,顯示一個字元型變量和整型

變量的語句如下:

表2.4中列出了有關printf函數的格式字元及其功能說明。

《C++語言入門經典》一2.3 資料的輸入與輸出

【例2.2】 使用格式輸出函數printf。

在本執行個體中,使用printf函數對不同類型變量進行輸出,對使用printf函數所用到的輸出格

式進行分析。

執行個體位置:CD光牒mr源碼第2章2.2

上述程式中,定義了一個整型變量iint,并在printf函數中使用格式字元%d進行輸出;為字

符型變量cchar指派為'a',在printf函數中使用格式字元%c輸出字元。格式字元%f用來輸出實

型變量的數值。在最後一個printf輸出函數中,使用%s将一個字元串輸出,字元串内容不包括

雙引号。

《C++語言入門經典》一2.3 資料的輸入與輸出

另外,在格式說明中,在%符号和上述格式字元間可以插入幾種附加格式說明字元,如

表2.5所示。

《C++語言入門經典》一2.3 資料的輸入與輸出

說明

1)在使用printf 函數時,除x、e、g外,其他格式字元必須用小寫字母,如%d 不能寫

成%d 。

2)如果想輸出“%”符号,則需要在格式控制處使用“%%”進行輸出。

《C++語言入門經典》一2.3 資料的輸入與輸出

【例2.3】 在printf函數中使用附加符号。

在本執行個體中,使用printf 函數的附加格式說明字元,對輸出的資料進行更為精确的格式

設計。

執行個體位置:CD光牒mr源碼第2章2.3

1)在程式代碼中,在使用printf 函數對定義的長整型變量進行輸出時,應該在%d 格式字

符中添加l字元,繼而輸出長整型變量。

2)%s 用來輸出一個字元串的格式字元,在結果中可以看到輸出了字元串“love”。

3)%10s 為格式%ms,表示輸出字元串占m列,如果字元串本身長度大于m,則突破m

的限制,将字元串全部輸出;若字元串小于m,則用空格進行左補齊。可以看到在字元串

“love”前後存在6個空格。

4)%-10s 格式為%-ms,表示如果字元串長度小于m,則在m列範圍内,字元串向左靠,右

補空格。

5)%10.3s 格式為%m.ns,表示輸出占m列,但隻取字元串左端n個字元。這n個字元輸出在

m列的右側,左補空格。

6)%-10.3s 格式為%-m.ns,其中m、n含義同上,n個字元輸出在m列範圍内的左側,右補

空格。如果n>m,則m自動取n值,即保證n個字元正常輸出。

程式運作結果如圖2.3所示。

與格式輸出函數printf相對應的是格式輸入函數scanf。該函數的功能是指定固定的格式,

 并且按照指定的格式接收使用者在鍵盤上輸入的資料,最後将資料存儲在指定的變量中。

scanf函數的一般格式為:

scanf(格式控制,位址清單)

從scanf 函數的一般格式可以看出,參數位置中的格式控制與printf 函數的相同。例如,%d

表示十進制的整型,%c表示單字元。而在位址清單中,此處應該給出用來接收資料變量的地

址。例如,得到一個整型資料的操作如下:

scanf("%d",&iint); /得到一個整型資料/

在上面的代碼中,&符号表示取iint變量的位址,是以不用關心變量的位址具體是多少,

隻要在代碼中變量的辨別符前加&符号,就表示取變量的位址。

編寫程式時,在scanf函數的參數位址清單處,一定要使用變量的位址,而不是變量的

辨別符,否則編譯器會提示出錯。

表2.6中列出了scanf函數中使用的格式字元及其功能說明。

《C++語言入門經典》一2.3 資料的輸入與輸出

格式字元%s 用來輸入字元串。将字元串送到一個字元數組中,在輸入時以非空白字元

開始,以第一個空白字元結束。字元串以串結束标志“0”作為最後一個字元。

【例2.4】 使用scanf格式輸入函數得到使用者輸入的資料。

在本執行個體中,利用scanf函數得到使用者輸入的兩個整型資料,因為scanf函數隻能用于輸入

操作,是以若要在螢幕上顯示資訊,則需要使用顯示函數。

執行個體位置:CD光牒mr源碼第2章2.4

1)為了能接收使用者輸入的整型資料,在程式代碼中定義了兩個整型變量iint1和iint2。

2)因為scanf函數隻能接收使用者輸入的資料,而不能顯示資訊,是以先使用puts函數輸出

一段字元表示資訊提示。puts函數在輸出字元串之後會自動進行換行,這樣就可以省去使用換

行符的麻煩。

3)調用scanf 格式輸入函數,在函數參數中可以看到,在格式控制的位置使用雙引号将格

式字元包括,%d 表示輸入的為十進制的整數。在參數中的位址清單位置,使用&符号表示變

量的位址。

4)此時變量iint1 和iint2 已經得到了使用者輸入的資料,調用printf 函數将變量進行輸出,這

裡要注意區分的是printf函數使用的是變量的辨別符,而不是變量的位址。scanf函數使用的是

變量的位址,而不是變量的辨別符。

程式是怎樣将輸入的内容分别儲存到指定的兩個變量中的呢?原來,scanf函數使用空

白字元分隔輸入的資料,這些空白字元包括空格符、換行符、制表符(tab )。如在

本程式中,使用換行符作為空白字元。

《C++語言入門經典》一2.3 資料的輸入與輸出

在printf函數中,除了格式字元外,還有附加格式用于更為具體的說明,相應地,scanf函

數中也有附加格式說明字元用于更為具體的格式說明,如表2.7所示。

《C++語言入門經典》一2.3 資料的輸入與輸出

【例2.5】 使用附加格式說明scanf函數的格式輸入。

在本執行個體中,将所有scanf附加格式都進行格式輸入的說明,通過這些指定格式的輸入,

對比輸入前後的結果,觀察其附加格式的效果。

執行個體位置:CD光牒mr源碼第2章2.5

繼續閱讀