格式化输入输出
格式化的输入输出的语法如下 -
read fmt, variable_list
print fmt, variable_list
write fmt, variable_list
在哪里,
格式规范定义了格式化数据的显示方式。它由一个字符串组成,其中包含一个列表edit descriptors在括号内。
一个edit descriptor指定显示字符和数字的确切格式,例如宽度、小数点后的位数等。
例如
下表描述了描述符 -
描述符 |
描述 |
例子 |
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 的含义在下表中给出。真正的价值在他们的领域是正确的。如果字段宽度不足以容纳实数,则字段用星号填充。
请注意,要打印一个小数点后三位的实数,至少需要十个字段宽度。一个用于尾数的符号,两个用于零,四个用于尾数,两个用于指数本身。一般来说,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 |
以下符号与格式描述符一起使用 -
序号 |
符号和说明 |
1 |
c
列号
|
2 |
d
实际输入或输出的小数点右边的位数
|
3 |
m
要显示的最小位数
|
4 |
n
要跳过的空格数
|
5 |
r
重复计数——使用一个描述符或一组描述符的次数
|
6 |
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
上面的代码编译执行后,会产生如下结果:(假设用户输入姓名Alex)
Enter your first name.
Up to 20 characters, please
Alex
示例 3
program formattedPrint
implicit none
real :: c = 1.2786456e-9, d = 0.1234567e3
integer :: n = 300789, k = 45, i = 2
character (len=15) :: str="CAINIAOYA"
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
CAINIAOYA
123.457
0.1279E-08
n = 300789 d = *******