fortran fortran中文资料网
手气不错
Article

015.basicInputAndOutput_基础输入输出

2026年5月18日入门级

输入输出是我们平常说的I/O即INPUT/OUTPUT。输入输出的设计是“打印”和“读取”,也是设计程序和外部世界之间的数据流,一般称之为交互

本文代码

program basicInputAndOutputDemo
  implicit none
  real :: length ! real类型,矩形长度
  real :: width ! real类型,矩形宽度
  real :: areaSquare ! real类型,矩形面积
  print *,"输入矩形长度和宽度,两数间使用用空格分隔"
  read *,length,width
  areaSquare=length*width
  print *,"输入结果:"
  print *,"矩形长度=",length
  print *,"矩形宽度=",width
  print *,"矩形面积=",areaSquare
end program basicInputAndOutputDemo

编译运行

(base) hong@hongdeMacBook-Pro 015.basicInputAndOutput % gfortran exampleBasicInputAndOutput.f90
(base) hong@hongdeMacBook-Pro 015.basicInputAndOutput % ./a.out 
 输入矩形长度和宽度,两数间使用空格、换行、或逗号分隔
10,20
 输入结果:
 矩形长度=   10.0000000    
 矩形宽度=   20.0000000    
 矩形面积=   200.000000    
(base) hong@hongdeMacBook-Pro 015.basicInputAndOutput % ./a.out
 输入矩形长度和宽度,两数间使用空格、换行、或逗号分隔
10 25
 输入结果:
 矩形长度=   10.0000000    
 矩形宽度=   25.0000000    
 矩形面积=   250.000000    
(base) hong@hongdeMacBook-Pro 015.basicInputAndOutput % ./a.out
 输入矩形长度和宽度,两数间使用空格、换行、或逗号分隔
10
30.5
 输入结果:
 矩形长度=   10.0000000    
 矩形宽度=   30.5000000    
 矩形面积=   305.000000  
(base) hong@hongdeMacBook-Pro 015.basicInputAndOutput % 

结果分析

本例中我输入了三组不同的算例,这里print *与read *都是列表导向I/O。使用方便,输出格式由编译器自动决定,因此小数位和空格不完全由开发者控制。

  • 10,20
    • 程序按顺序先执行read *,lengthMeter,widthMeter,通过终端交互输入得到矩形长宽10,20。
    • 再执行areaSquareMeter=lengthMeter*widthMeter,得到areaSquareMeter=10*20=200。
    • 最终执行print *,”矩形面积=”,areaSquare,输出面积areaSquareMeter的值即200,结果正确。
  • 10 25 同上,使用空格间隔,结果正确。
  • 10
    30.5 同上,使用换行间隔,结果正确。

I/O结构内较简流程:提示信息(类型、范围、格式、数量等)->输入数据->合法判断->计算语句->输出语句。简单说输入使数据进入程序参与计算,输出使数据离开计算交给使用者。

序号对应流程本例语句
1提示信息print *,”输入矩形长度和宽度,两数间使用用空格分隔”
2输入数据read *,lengthMeter,widthMeter
3合法判断
4计算语句areaSquareMeter=lengthMeter*widthMeter
5输出语句print *,”矩形面积=”,areaSquare

由于暂未介绍ifelse分支,我在本例中就未作输入合法判断。如某程序运行时提示“输入该金属常温密度,单位为g/cm3”,我若输入22.63会超出金属锇的常温密度,程序就进入一个判断分支,该分支中可能有一个输出语句告诉我该值不合法须重新输入,并返回到read语句中读取我接下来的输入,当判断输入数据合法后再分支执行合法有效的后续语句。

错误示范

(base) hong@hongdeMacBook-Pro 015.basicInputAndOutput % ./a.out
 输入矩形长度和宽度,两数间使用空格、换行、或逗号分隔
 你 我
At line 7 of file exampleBasicInputAndOutput.f90 (unit = 5, file = 'stdin')
Fortran runtime error: Bad real number in item 1 of list input

Error termination. Backtrace:
#0  0x100a96103
#1  0x100a96cd7
#2  0x100a975a7
#3  0x100baff8b
#4  0x100bb0b4f
#5  0x100bb19eb
#6  0x1007246fb
#7  0x1007248c3
(base) hong@hongdeMacBook-Pro 015.basicInputAndOutput % ./a.out
 输入矩形长度和宽度,两数间使用空格、换行、或逗号分隔
3 2*3
 输入结果:
 矩形长度=   3.00000000    
 矩形宽度=   3.00000000    
 矩形面积=   9.00000000    
(base) hong@hongdeMacBook-Pro 015.basicInputAndOutput % ./a.out
 输入矩形长度和宽度,两数间使用空格、换行、或逗号分隔
3*4 5*6
 输入结果:
 矩形长度=   4.00000000    
 矩形宽度=   4.00000000    
 矩形面积=   16.0000000    
(base) hong@hongdeMacBook-Pro 015.basicInputAndOutput % ./a.out
 输入矩形长度和宽度,两数间使用空格、换行、或逗号分隔
6*8.2 3.14*1e-1
 输入结果:
 矩形长度=   8.19999981    
 矩形宽度=   8.19999981    
 矩形面积=   67.2399979    
(base) hong@hongdeMacBook-Pro 015.basicInputAndOutput % 

输入的数据要与变量类型匹配,length与width是real类型,所以可以输入整数值、小数值、科学计数法即表达实数的值。不能输入逻辑型、字符串型数据。也不能在本例中输入算式例如2*3,这并非不合法:

序号输入fortran理解为本例只读取前两个变量
13 2*33,3,33,3
23*4 5*64,4,4,6,6,6,6,64,4
36*8.2 3.14*1e-18.2,8.2,8.2,8.2,8.2,8.2,后面的3.14*1e-1无意义,真将6个8.2读完接着读3.14*1e-1就会报错。8.2,8.2
(base) hong@hongdeMacBook-Pro 015.basicInputAndOutput % ./a.out
 输入矩形长度和宽度,两数间使用空格、换行、或逗号分隔
1.1e2 1.2e3
 输入结果:
 矩形长度=   110.000000    
 矩形宽度=   1200.00000    
 矩形面积=   132000.000    
(base) hong@hongdeMacBook-Pro 015.basicInputAndOutput % 

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注