在使用者與計算機互動的過程中,資料輸入和資料輸出是必不可少的操作過程,計算機需要
通過輸入擷取來自使用者的操作指令,并通過輸出來顯示操作結果。本節将介紹資料輸入與輸出
的相關内容。
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函數的格式字元及其功能說明。
【例2.2】 使用格式輸出函數printf。
在本執行個體中,使用printf函數對不同類型變量進行輸出,對使用printf函數所用到的輸出格
式進行分析。
執行個體位置:CD光牒mr源碼第2章2.2
上述程式中,定義了一個整型變量iint,并在printf函數中使用格式字元%d進行輸出;為字
符型變量cchar指派為'a',在printf函數中使用格式字元%c輸出字元。格式字元%f用來輸出實
型變量的數值。在最後一個printf輸出函數中,使用%s将一個字元串輸出,字元串内容不包括
雙引号。
另外,在格式說明中,在%符号和上述格式字元間可以插入幾種附加格式說明字元,如
表2.5所示。
說明
1)在使用printf 函數時,除x、e、g外,其他格式字元必須用小寫字母,如%d 不能寫
成%d 。
2)如果想輸出“%”符号,則需要在格式控制處使用“%%”進行輸出。
【例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函數中使用的格式字元及其功能說明。
格式字元%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 )。如在
本程式中,使用換行符作為空白字元。
在printf函數中,除了格式字元外,還有附加格式用于更為具體的說明,相應地,scanf函
數中也有附加格式說明字元用于更為具體的格式說明,如表2.7所示。
【例2.5】 使用附加格式說明scanf函數的格式輸入。
在本執行個體中,将所有scanf附加格式都進行格式輸入的說明,通過這些指定格式的輸入,
對比輸入前後的結果,觀察其附加格式的效果。
執行個體位置:CD光牒mr源碼第2章2.5