Fortran 基础输入输出

到目前为止,我们已经看到,我们可以分别使用 read* 语句从键盘读取数据,并使用 print* 语句将输出显示到屏幕上。这种形式的输入输出是自由格式的输入输出,它被称为列表导向的输入输出。

自由格式的简单 I/O 具有以下形式:

  1. read(*,*) item1, item2, item3...
  2. print *, item1, item2, item3
  3. write(*,*) item1, item2, item3...

然而,格式化的 I/O 为您的数据传输提供了更大的灵活性。

格式化输入输出

格式化输入输出的语法如下:

  • read fmt, variable_list
  • print fmt, variable_list
  • write fmt, variable_list

而且:

  • fmt 是格式规范
  • 变量列表是从键盘读取或在屏幕上写入的变量列表

格式规范定义了格式化数据的显示方式。它由一个字符串组成,括号中包含一系列编辑描述符。

编辑描述符指定显示字符和数字的确切格式,例如宽度、小数点后的数字等。

实例
  1. 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的含义如下表所示。实际值在其领域内得到了正确的证明。如果字段宽度不足以容纳实数,则用星号填充字段。

请注意,要打印出一个有 3 位小数的实数,需要至少 10 个字段的宽度。1 个代表尾数符号,两个代表零,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
/

Slash 描述符-用于插入空白行。这采用 / 的形式,并强制下一个数据输出在新行上

print "(/,5x, a10)", str

以下符号与格式描述符一起使用:

序号符号 & 描述
1

c

列编号

2

d

实际输入或输出的小数点右侧的位数

3

m

要显示的最小位数

4

n

要跳过的空格数

5

r

重复计数 - 使用描述符或描述符组的次数

6

w

字段宽度 - 用于输入或输出的字符数


实例1
  1. program printPi
  2. pi = 3.141592653589793238
  3. Print "(f6.3)", pi
  4. Print "(f10.7)", pi
  5. Print "(f20.15)", pi
  6. Print "(e16.4)", pi/100
  7. end program printPi

结果如下:

  1. 3.142
  2. 3.1415927
  3. 3.141592741012573
  4. 0.3142E-01
实例2
  1. program printName
  2. implicit none
  3. character (len = 15) :: first_name
  4. print *,' Enter your first name.'
  5. print *,' Up to 20 characters, please'
  6. read *,first_name
  7. print "(1x,a)",first_name
  8. end program printName

结果如下:

  1. Enter your first name.
  2. Up to 20 characters, please
  3. Zara
实例3
  1. program formattedPrint
  2. implicit none
  3. real :: c = 1.2786456e-9, d = 0.1234567e3
  4. integer :: n = 300789, k = 45, i = 2
  5. character (len=15) :: str="Tutorials Point"
  6. print "(i6)", k
  7. print "(i6.3)", k
  8. print "(3i10)", n, k, i
  9. print "(i10,i3,i5)", n, k, i
  10. print "(a15)",str
  11. print "(f12.3)", d
  12. print "(e12.4)", c
  13. print '(/,3x,"n = ",i6, 3x, "d = ",f7.4)', n, d
  14. end program formattedPrint

结果如下:

  1. 45
  2. 045
  3. 300789 45 2
  4. 300789 45 2
  5. Tutorials Point
  6. 123.457
  7. 0.1279E-08
  8. n = 300789 d = *******

Format 语句

format 语句让您可以在一个语句中混合和匹配字符、整数和实数输出。

  1. program productDetails
  2. implicit none
  3. character (len = 15) :: name
  4. integer :: id
  5. real :: weight
  6. name = 'Ardupilot'
  7. id = 1
  8. weight = 0.08
  9. print *,' The product details are'
  10. print 100
  11. 100 format (7x,'Name:', 7x, 'Id:', 1x, 'Weight:')
  12. print 200, name, id, weight
  13. 200 format(1x, a, 2x, i3, 2x, f5.2)
  14. end program productDetails

结果如下:

  1. The product details are
  2. Name: Id: Weight:
  3. Ardupilot 1 0.08

分类导航