fortran教程7:输入输出

文章介绍了Fortran编程中的输入输出函数,包括print、read和write的使用,重点讨论了格式化输出和文件操作。通过实例展示了如何打开和关闭文件,以及如何对文件进行读写操作,包括写入格式的设定和处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Fortran系列:

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
...
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微小冷

请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值