位置:首页 > 高级语言 > Fortran在线教程 > Fortran基本输入输出

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