我开始学习Fortran,我正在做一个小案例测试程序,用户输入两个实数并选择算术运算符(来自+ - * /)。当用户选择" *"
时,会出现以下错误F6502 : read <con> - positive integer expected in repeat field
如果用户选择&#34; /&#34;编译器执行默认情况,并显示此消息
invalid operator, thanks
the result is 0.000000E+00
该计划如下。
program operateur
implicit none
CHARACTER(LEN=1) :: oper
real::a,b,res
print*,'Give the first number a :'
read*,a
print*,'Give the second number b :'
read*,b
print*,'which operation ?'
read*,oper
!print*,'donnez a,b,oper :'
! read(*,*)a,b,oper
select case (oper)
case ('+')
res=a+b
case ('-')
res=a-b
case ('*')
res=a*b
case ('/')
res=a/b
case default
print*, "Invalid Operator, thanks"
end select
print*,'the result is ',res
end program operateur
答案 0 :(得分:7)
FORTRAN输入和输出格式规则相当复杂。每个输入和ouptut语句都有两个具有特殊含义的参数。例如
READ (10,"(2I10)") m,n
第一个参数是文件描述符。这是10
。第二个参数"(2I10)"
是格式说明符。如果您使用星号(*
)作为格式说明符,则可以启用列表控制的格式化模式。
如名称所示,列出有向输入由输入运算符的参数列表控制。
*
)在列表导向输入模式中是特殊的?输入列表分为一个或多个输入记录。每个输入记录的格式为c
,k*c
或k*
,其中c
是文字常量,k
是整数文字常量。例如,
5*1.01
作为k*c
方案的实例被解释为数字1.01
5*
被解释为空输入记录的5个副本。
符号星号(*
)在列表导向输入模式中具有特殊含义。某些编译器运行时会在列表导向输入中遇到没有整数常量的星号时报告运行时错误,其他编译器会读取星号。例如,GNU Fortran编译器因标准符合性而闻名,因此其运行时将接受*
。其他编译器运行时可能会失败。
/
)?逗号(,
),斜杠(/
)和一个或多个空格()的序列在列表中被视为记录分隔符 - 指令输入模式。
在这种模式下,没有简单的方法可以自行输入斜杠。
使运行时接受单斜杠或星号的方法是通过明确指定格式来离开列表导向的输入模式:
read (*,"(A1)") oper
应该允许您输入任何单个字符。
答案 1 :(得分:-1)
好的,那么正确的源代码是
program operateur
implicit none
CHARACTER(LEN=1) :: oper
real::a,b,res
print*,'Give the first number a :'
read*,a
print*,'Give the second number b :'
read*,b
print*,'which operation ?'
read (*,"(A1)") oper
select case (oper)
case ('+')
res=a+b
case ('-')
res=a-b
case ('*')
res=a*b
case ('/')
res=a/b
case default
print*, "Invalid Operator, thanks"
end select
print*,'the result is ',res
end program operateur