到目前為止,我們已看到,我們可以使用打印print*語句,以及讀取鍵盤使用read*語句,并顯示數(shù)據(jù)輸出到屏幕上。這種形式的輸入輸出是自由格式的I/O,它被稱為列表控制的輸入輸出。
自由格式簡單I/O的形式為:
read(*,*) item1, item2, item3... print *, item1, item2, item3 write(*,*) item1, item2, item3...
然而,格式化I/O使數(shù)據(jù)傳輸有更多的靈活性。
格式化輸入輸出有語法如下:
read fmt, variable_list print fmt, variable_list write fmt, variable_list
其中,
fmt 是格式規(guī)范
variable-list 要被從鍵盤讀或?qū)懺谄聊簧系淖兞康牧斜?/p>
格式規(guī)范定義了在其上顯示格式化的數(shù)據(jù)的方式。它由一個字符串,包含了編輯描述符在括號中的列表。
編輯描述符指定的確切格式,例如寬度,其中字符和數(shù)字被顯示小數(shù)點后等,數(shù)字位數(shù)。
例如:
Print "(f6.3)", pi
下表描述了描述:
描述符 | 描述 | 示例 |
---|---|---|
I | 這是用于整數(shù)輸出。此采用的形式為“rIw.m',其中 r, w 和m 的含義在下面的表格中給出。真正的值在它們字段右側適應。如果字段寬度不足以容納一個整數(shù)則用星號代替。 | print "(3i5)", i, j, k |
F | 這是用于實數(shù)輸出。此采用的形式為“rFw.d',其中r, w 和 d 的含義在下面的表格中給出。真正的值在它們字段右側適應。 如果字段寬度不足夠大以容納所述實數(shù)則字段用星號表示。 | print "(f12.3)",pi |
E |
這是用于指數(shù)形式實時輸出。在“E”描述語句的形式為'rEw.d',其中r,w和d的含義如下表中給出。真正的值在它們字段右側適應. 如果字段寬度不足夠大以容納所述實數(shù)則字段用星號表示。 請注意,打印出與三位小數(shù),實數(shù)至少10需要一個字段寬度。一個用于尾數(shù),2為零,4為尾數(shù)部分和兩個用于指數(shù)本身的符號。在一般情況下,w≥ d +7。 |
print "(e10.3)",123456.0 gives ‘0.123e+06’ |
ES | 這是用于實時輸出(科學計數(shù)法)。此采用的形式為“rESw.d',其中 r, w 和 d的含義在下面的表格中給出。上述的“E”描述從傳統(tǒng)的眾所周知的“科學表示法”略有不同。科學表示法具有尾數(shù)范圍為1.0至10.0對E描述符,它具有在范圍0.1到1.0的尾數(shù)不同。真實的值在字段的右側。如果字段寬度不足夠大以容納所述實數(shù)則字段用星號表示。這里,字段寬度必須滿足 w ≥ d +7 | print "(es10.3)",123456.0 gives ‘1.235e+05’ |
A | 這是用于字符輸出。 此采用的形式為“rAw”,其中r和w的含義在下面的表格中給出。字符類型是在它們的字段右側。如果字段寬度不足于以容納該字符串則字段的第一個“w”字符的字符串。 | print "(a10)", str |
X | 這是用于空間輸出。這需要形式'nX',其中“n”是所需的空間數(shù)量。 | print "(5x, a10)", str |
/ | 斜杠描述 - 用于插入空行。這需要的形式'/',并強制下一個數(shù)據(jù)輸出為一個新行。 | print "(/,5x, a10)", str |
以下符號用于格式描述符:
符號 | 描述 |
---|---|
c | 列數(shù) |
d | 右側的小數(shù)位數(shù)為真正的輸入或輸出 |
m | 要顯示的最小位數(shù) |
n | 跳過的空格數(shù) |
r | 重復次數(shù) - 使用描述或組描述符的次數(shù) |
w | 字段寬度- 字符數(shù)用于輸入或輸出 |
示例 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
當上述代碼被編譯和執(zhí)行時,它產(chǎn)生了以下結果:
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
當上述代碼被編譯和執(zhí)行時,它產(chǎn)生了以下結果:(假設用戶輸入的名稱為 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
當上述代碼被編譯和執(zhí)行時,它產(chǎn)生了以下結果:
45 045 300789 45 2 300789 45 2 Tutorials Point 123.457 0.1279E-08 n = 300789 d = *******
format語句允許混合并匹配字符,整數(shù)和實際輸出在一條語句中。下面的例子說明了這一點:
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
當上述代碼被編譯和執(zhí)行時,它產(chǎn)生了以下結果:
The product details are Name: Id: Weight: Ardupilot 1 0.08