- MATLAB程序設計及應用
- 郭斯羽等編著
- 1697字
- 2022-05-06 19:27:49
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 格式字符串中使用的特殊字符序列

- Spring Boot 2實戰之旅
- Python編程自學手冊
- Mastering JavaScript Functional Programming
- OpenCV實例精解
- 游戲程序設計教程
- Data Analysis with Stata
- Python漫游數學王國:高等數學、線性代數、數理統計及運籌學
- 零基礎學Python數據分析(升級版)
- JavaScript:Moving to ES2015
- Mobile Device Exploitation Cookbook
- C語言從入門到精通
- Scratch3.0趣味編程動手玩:比賽訓練營
- Frank Kane's Taming Big Data with Apache Spark and Python
- Emotional Intelligence for IT Professionals
- C語言程序設計