Fortran基本輸入輸出


到目前為止,我們已看到,我們可以使用列印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語句

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