到目前為止,我們已看到,我們可以使用列印print*語句,以及讀取鍵盤使用read*語句,並顯示資料輸出到螢幕上。這種形式的輸入輸出是自由格式的I/O,它被稱為列表控制的輸入輸出。
自由格式簡單I/O的形式為:
read(*,*) item1, item2, item3... print *, item1, item2, item3 write(*,*) item1, item2, item3...
然而,格式化I/O使資料傳輸有更多的靈活性。
格式化輸入輸出有語法如下:
read fmt, variable_list print fmt, variable_list write fmt, variable_list
其中,
fmt 是格式規範
variable-list 要被從鍵盤讀或寫在螢幕上的變數的列表
格式規範定義了在其上顯示格式化的資料的方式。它由一個字串,包含了編輯描述符在括號中的列表。
編輯描述符指定的確切格式,例如寬度,其中字元和數位被顯示小數點後等,數位位數。
例如:
Print "(f6.3)", pi
下表描述了描述:
描述符 | 描述 | 範例 |
---|---|---|
I | 這是用於整數輸出。此採用的形式為“rIw.m',其中 r, w 和m 的含義在下面的表格中給出。真正的值在它們欄位右側適應。如果欄位寬度不足以容納一個整數則用星號代替。 | print "(3i5)", i, j, k |
F | 這是用於實數輸出。此採用的形式為“rFw.d',其中r, w 和 d 的含義在下面的表格中給出。真正的值在它們欄位右側適應。 如果欄位寬度不足夠大以容納所述實數則欄位用星號表示。 | print "(f12.3)",pi |
E |
這是用於指數形式實時輸出。在“E”描述語句的形式為'rEw.d',其中r,w和d的含義如下表中給出。真正的值在它們欄位右側適應. 如果欄位寬度不足夠大以容納所述實數則欄位用星號表示。 請注意,列印出與三位小數,實數至少10需要一個欄位寬度。一個用於尾數,2為零,4為尾數部分和兩個用於指數本身的符號。在一般情況下,w≥ d +7。 |
print "(e10.3)",123456.0 gives ‘0.123e+06’ |
ES | 這是用於實時輸出(科學計數法)。此採用的形式為“rESw.d',其中 r, w 和 d的含義在下面的表格中給出。上述的“E”描述從傳統的眾所周知的“科學表示法”略有不同。科學表示法具有尾數範圍為1.0至10.0對E描述符,它具有在範圍0.1到1.0的尾數不同。真實的值在欄位的右側。如果欄位寬度不足夠大以容納所述實數則欄位用星號表示。這裡,欄位寬度必須滿足 w ≥ d +7 | print "(es10.3)",123456.0 gives ‘1.235e+05’ |
A | 這是用於字元輸出。 此採用的形式為“rAw”,其中r和w的含義在下面的表格中給出。字元型別是在它們的欄位右側。如果欄位寬度不足於以容納該字串則欄位的第一個“w”字元的字串。 | print "(a10)", str |
X | 這是用於空間輸出。這需要形式'nX',其中“n”是所需的空間數量。 | print "(5x, a10)", str |
/ | 斜槓描述 - 用於插入空行。這需要的形式'/',並強制下一個資料輸出為一個新行。 | print "(/,5x, a10)", str |
以下符號用於格式描述符:
符號 | 描述 |
---|---|
c | 列數 |
d | 右側的小數位數為真正的輸入或輸出 |
m | 要顯示的最小位數 |
n | 跳過的空格數 |
r | 重複次數 - 使用描述或組描述符的次數 |
w | 欄位寬度- 字元數用於輸入或輸出 |
範例 1
program printPi pi = 3.141592653589793238 Print "(f6.3)", pi Print "(f10.7)", pi Print "(f20.15)", pi Print "(e16.4)", pi/100 end program printPi
當上述程式碼被編譯和執行時,它產生了以下結果:
3.142 3.1415927 3.141592741012573 0.3142E-01
範例 2
program printName implicit none character (len=15) :: first_name print *,' Enter your first name.' print *,' Up to 20 characters, please' read *,first_name print "(1x,a)",first_name end program printName
當上述程式碼被編譯和執行時,它產生了以下結果:(假設使用者輸入的名稱為 Zara)
Enter your first name. Up to 20 characters, please Zara
範例 3
program formattedPrint implicit none real :: c = 1.2786456e-9, d = 0.1234567e3 integer :: n = 300789, k = 45, i = 2 character (len=15) :: str="Tutorials Point" print "(i6)", k print "(i6.3)", k print "(3i10)", n, k, i print "(i10,i3,i5)", n, k, i print "(a15)",str print "(f12.3)", d print "(e12.4)", c print '(/,3x,"n = ",i6, 3x, "d = ",f7.4)', n, d end program formattedPrint
當上述程式碼被編譯和執行時,它產生了以下結果:
45 045 300789 45 2 300789 45 2 Tutorials Point 123.457 0.1279E-08 n = 300789 d = *******
format語句允許混合並匹配字元,整數和實際輸出在一條語句中。下面的例子說明了這一點:
program productDetails implicit none character (len=15) :: name integer :: id real :: weight name = 'Ardupilot' id = 1 weight = 0.08 print *,' The product details are' print 100 100 format (7x,'Name:', 7x, 'Id:', 1x, 'Weight:') print 200, name, id, weight 200 format(1x, a, 2x, i3, 2x, f5.2) end program productDetails
當上述程式碼被編譯和執行時,它產生了以下結果:
The product details are Name: Id: Weight: Ardupilot 1 0.08