官术网_书友最值得收藏!

2.6.3 fprintf函數

fprintf函數能夠使用戶更為自由地定制數據在命令窗口中的文本輸出方式。該函數的調用方式為

其中,formatSpec是格式字符串,其后的A1, ..., An為數量不限的參數。格式字符串formatSpec中包含兩種類型的內容:直接輸出的文本內容,以及從后面的A1, ..., An參數列表中相應位置的參數取值,以產生相應文本輸出的格式定義部分。

【例2.16】

一名顧客購買了單價為5.5元的面包2個、單價為10.8元的蛋糕1包、以及單價為6元的薯片3筒。請計算總價,并以“本次購物金額:××.××元”的形式顯示在命令窗口中,其中金額部分顯示到小數點后第2位。

在命令窗口中輸入如下內容:

輸出結果為

在這個fprintf調用中,'本次購物金額:%0.2f元\n'就是格式字符串,其中,'%0.2f'是格式定義部分,也是在格式字符串中出現的第一個格式定義部分。因此,對應于格式化字符串后的第一個參數——計算金額的表達式的顯示格式。'\n'表示換行符。

下面對fprintf函數中的格式定義等內容進行詳細介紹。

1. 格式定義

格式字符串中的格式定義都以轉義符'%'開始,即該字符在格式化字符串中不再表示百分號,而是用來表示其后的內容被定義了一個顯示格式。fprintf的格式化字符串中顯示格式的組成如圖2-6所示。

圖2-6 fprintf的格式化字符串中顯示格式的組成

在顯示格式中,除了轉換字符是必需的,其余部分都是可選的。MATLAB R2020a中的合法轉換字符見表2-7。

表2-7 MATLAB R2020a中的合法轉換字符

【例2.17】

一位名叫Steve的學生,學號為201907040118,已完成課程7門,平均績點(GPA)為4.07。請按“姓名:××;學號:××;已完成課程:××門;平均績點:××。”的格式顯示上述信息。

在命令窗口中輸入如下內容:

輸出結果為

2. 最小顯示寬度、精度和標志位

最小顯示寬度是指在輸出相應數據時,該數據所轉換成的字符串的最小長度(字符數)。精度對浮點型的數據輸出有效,用于規定所輸出的小數在小數點之后數字的位數。最小顯示寬度和精度用數字直接在格式字符串中給出,或者使用字符“*”,表示所需要的最小顯示寬度和精度的數值從格式字符串之后的參數列表中取值。

標志位則規定了輸出數字長度不滿足最小顯示寬度和精度的要求時,所采取的補齊方式,以及其他一些特殊的顯示設置。標志位字符的合法設置見表2-8。

表2-8 標志位字符的合法設置

【例2.18】

繼續使用例2.17。如果現在要求姓名字符串的最小顯示寬度由變量nameWidth函數給出,并且姓名靠左顯示;已完成課程門數的最小顯示寬度為2字符;GPA值需要顯示到小數點后第2位。除了Steve,還有一名學生Arya,其學號為201907040206,已完成課程12門,GPA值為4.1。請按照格式要求分兩行顯示這兩名學生的有關信息。

在命令窗口中輸入如下內容:

輸出結果為

可見,通過使用最小顯示寬度等設置,可以使得輸出內容更為規整,便于觀察。不過,需要注意的是,最小顯示寬度是以字符數來計算的,一個中文字符和一個英文字符的字符數相同,但是它們實際的尺寸是不同的:英文字符的實際寬度是中文字符的一半。而用來補齊空格是用英文字符,因此對于包含中文字符的字符串的顯示而言,使用最小顯示寬度也往往不能保證獲得對齊的效果。

3. 子類型

子類型的合法設置為字符'b'或't',與'u'、'o'、'x'或'X'等轉換字符合用,用于將浮點型數據的二進制值以相應的無符號十進制、八進制或十六進制的形式顯示出來。'b'表示按雙精度浮點型數據的二進制值顯示,'t'表示按單精度浮點型數據的二進制值顯示。

4. 參數標識號

如果沒有使用參數標識號,那么fprintf函數將根據格式字符串中的各個格式定義域,以及在最小顯示寬度和精度的位置上使用的“*”號出現的先后順序,依次對應到格式字符串之后的參數列表中的各個參數。利用參數標識號,則可以指定參數列表中任意位置的參數。參數標識號用“n$”的形式給出,其中n表示需要使用的參數的序號,從1開始。例如,“1$”表示參數列表中的第1個參數,“2$”表示第2個參數,以此類推。

【例2.19】

a=1949,b=204.9,先用十進制顯示a,用八進制顯示b的雙精度浮點型數據的二進制值,再用十六進制顯示a,并對八進制和十六進制的顯示結果分別加上前綴“00”和“0x”。

在命令窗口中輸入如下內容:

輸出結果為

5. 特殊字符

fprintf函數的格式字符串中還可以使用特定的字符序列來表示特殊字符(如'%')或不可見的字符(如回車符、制表符等)。格式字符串中使用的特殊字符序列見表2-9。

表2-9 格式字符串中使用的特殊字符序列

主站蜘蛛池模板: 当阳市| 望奎县| 太湖县| 容城县| 东台市| 南丰县| 吴旗县| 且末县| 太保市| 五大连池市| 利川市| 冕宁县| 崇明县| 休宁县| 淮安市| 凉城县| 德保县| 望城县| 澜沧| 达尔| 岳池县| 广汉市| 邵东县| 逊克县| 清新县| 勃利县| 六盘水市| 涿鹿县| 桃园县| 黄冈市| 徐水县| 长丰县| 吴忠市| 博罗县| 大城县| 井研县| 怀安县| 赤峰市| 义乌市| 阳东县| 宁乡县|