fortran教程7:输入输出

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录

前情提要

fortran的输入输出函数有三种即read, print, write其标准调用方式如下其中fmt表示输入输出的字符格式如果不想设置可以记作*前几节一直调用的print *,就是这种情况。

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

print

为了便于理解这里先用print作为示例等到后面介绍文件读写的时候再用read, write

fmt的本质是一段字符串例如

print "(f6.3)", 3.1415926

结果为3.142

其中f表示浮点型下表列出fortran所有的交互格式

类型格式
ingegerriw.m
characterrAw
realrFw.d, rEw.d, rESw.d
空格nX空行/

其中个参数含义为i表示整数F表示浮点数E, ES表示科学计数法。其他数字表示

  • d 右侧的小数位数
  • m 要显示的最小位数
  • n 跳过的空格数
  • r 左侧空格
  • w 字段宽度

一般当字符宽度w不足以打印设置格式的长度时会返回长为w的星号例如

program printPi

   pi = 3.141592653589793238 
   
   print "(f6.3)", pi 
   print "(f4.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

f4.3表示保留3位小数的同时宽度为4这显然是不够的所以变成了4个星号。

f20.15表示保留15位小数同时占据20个字符的宽度所以前面出现了3个空格。

打开文件

fortranopen打开文件其参数列表如下

  • unit 取值为0-999的数字作为文件的标识符每个标识符只能对应一个文件
  • file 文件名为字符串
  • ioStat I/O状态为整型
  • err 错误
  • status 默认为'unknown'若为new表示该文件不存在old表示该文件已存在replace表示覆盖原本的文件'scratch’表示创建临时文件不需要文件名
  • access 默认"sequential"表示顺序读写若设为'direct'则可指定任意位置读写
  • form 'formatted'表示存为文本文件unformatted表示存为二进制
  • recl 文件字节长度

其中unitfile为必选参数。

在对文件内容执行完操作后通过close(unit)来关闭文件。

program fileTest
implicit none

   real, dimension(100) :: x, y  
   integer :: i
   
   do i=1,100
      x(i) = i * 0.1 
      y(i) = sin(x(i))
   end do

   open(1, file = 'test.txt', status = 'new')  
   do i=1,100  
      write(1,*) x(i), y(i)   
   end do  
   
   close(1) 
end program fileTest

在当前工作目录下出现test.txt内容为

  0.100000001       9.98334214E-02
  0.200000003      0.198669329    
  0.300000012      0.295520216    
...

文件读写

上面的案例中出现了write(1,*)此即写入文件的方法其主要参数为write(unit, fmt)其中unit即文件标识符fmt则与print中的fmt如出一辙表示写入格式如果将上面的写入代码改为

write(1,"f4.2") x(i)

则其内容变为

 0.10
 0.20
 0.30
 ...

所以这里就出现了一个问题fmt貌似只能对单个写入进行格式化。

但作为经典编程语言这个bug还是很容易解决的只需外挂格式将write这行改写为

write(1,100) x(i), y(i)
100 FORMAT('  ' , f6.2, 2f8.4)

效果为

  0.10  0.0998
  0.20  0.1987
  0.30  0.2955
  0.40  0.3894
  0.50  0.4794
...
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6