基本输入输出( Basic Input Output)
到目前为止,我们已经看到我们可以使用read *语句从键盘读取数据,并分别使用print*语句将输出显示到屏幕。 这种形式的输入输出是free format I/O,它被称为list-directed输入输出。
免费格式的简单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
Where,
fmt是格式规范
变量列表是要从键盘读取或写在屏幕上的变量列表
格式规范定义了格式化数据的显示方式。 它由一个字符串组成,其中包含括号中的edit descriptors列表。
edit descriptor指定确切的格式,例如,宽度,小数点后的数字等,其中显示字符和数字。
例如 (For example)
Print "(f6.3)", pi
下表描述了描述符 -
描述 | 描述 | 例 |
---|---|---|
I | 这用于整数输出。 这采用'rIw.m'形式,其中r,w和m的含义在下表中给出。 整数值在他们的领域是正确的。 如果现场宽度不足以容纳整数,那么该字段将填充星号。 | print“(3i5)”,i,j,k |
F | 这用于实数输出。 这采用'rFw.d'形式,其中r,w和d的含义在下表中给出。 真正的价值观在他们的领域是正确的。 如果现场宽度不足以容纳实数,那么该字段将填充星号。 | 打印“(f12.3)”,pi |
E | 这用于指数表示法的实际输出。 'E'描述符语句采用'rEw.d'形式,其中r,w和d的含义在下表中给出。 真正的价值观在他们的领域是正确的。 如果现场宽度不足以容纳实数,那么该字段将填充星号。 请注意,要打印出带有三位小数的实数,需要至少十位的字段宽度。 一个用于尾数的符号,两个用于零,四个用于尾数,两个用于指数本身。 通常,w≥d+ 7。 | print“(e10.3)”,123456.0给出'0.123e + 06' |
ES | 这用于实际输出(科学记数法)。 这采用'rESw.d'形式,其中r,w和d的含义在下表中给出。 上面描述的'E'描述符与传统众所周知的'scienti fi c符号'略有不同。 科学符号的尾数在1.0到10.0的范围内,而E描述符的尾数在0.1到1.0的范围内。 真正的价值观在他们的领域是正确的。 如果现场宽度不足以容纳实数,那么该字段将填充星号。 这里,宽度场必须满足表达式w≥d+ 7 | print“(es10.3)”,123456.0给出'1.235e + 05' |
A | 这用于字符输出。 这采用'rAw'形式,其中r和w的含义在下表中给出。 字符类型在他们的领域是正确的。 如果字段宽度不足以容纳字符串,那么字段将填充字符串的第一个“w”字符。 | print“(a10)”,str |
X | 这用于空间输出。 采用'nX'形式,其中'n'是所需空格的数量。 | print“(5x,a10)”,str |
/ | 斜杠描述符 - 用于插入空行。 采用“/”形式并强制下一个数据输出在新行上。 | print“(/,5x,a10)”,str |
以下符号与格式描述符一起使用 -
Sr.No | 符号和描述 |
---|---|
1 | c 列号 |
2 | d 实数输入或输出的小数位右边的位数 |
3 | m 要显示的最小位数 |
4 | n 要跳过的空格数 |
5 | r 重复计数 - 使用描述符或描述符组的次数 |
6 | w 字段宽度 - 用于输入或输出的字符数 |
例子1 (Example 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 (Example 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 (Example 3)
program formattedPrint
implicit none
real :: c = 1.2786456e-9, d = 0.1234567e3
integer :: n = 300789, k = 45, i = 2
character (len=15) :: str="IOWIKI"
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
IOWIKI
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