由于我的任务有一定的约束,使用F77。我正在学习使用子程序而试图写字符串时,我遇到错误。
PROGRAM test
IMPLICIT NONE
INTEGER a
CHARACTER*20 STR,str1
STR = 'Hello world'
a = 1
WRITE (*,*) a
WRITE (*,10) STR
CALL TEST(str1)
STOP
END
SUBROUTINE test(str2)
CHARACTER*20 str2
str2 = 'testing'
WRITE (*,10) STR2
RETURN
END
当试图编译这段代码,它返回一个“错误:缺少语句数10”
另外,我有一些其他问题:
*20
在CHARACTER*20 STR
是什么意思?这是字符串的大小?10
WRITE (*,10) STR
?这是字符串的长度要写入?(*,*)
意味着WRITE (*,*) a
正如你可以阅读这里的例子:https://www.obliquity.com/computer/fortran/io.html
给写所述第二值是隐式格式关键字,它是语句的相同程序单元,字符表达式或阵列包含完整格式规范,或星号*为列表式的格式内的标签的参数。
因此,如果你直接提供的数据,你可能要改为*那里使用。否则,你的程序需要在与格式声明了一些行有标签10。
是的,CHARACTER * 20 STR意味着该变量STR的长度是20的,因为你可以阅读例如在这里:https://www.obliquity.com/computer/fortran/datatype.html
字符后的* 20指定字符变量的大小(在此情况下20个字符)。 FORTRAN不使用空终止字符串和其它语言一样,相反,你必须预留固定的字符数。您的实际字符串可以比可变短,但从来没有更长的时间。
在写语句中的逗号(,)用于各种参数分开。 FORTRAN的某些版本允许您提供“命名的论点,但默认的是第一个参数是文件的代码写入(一个“*”意味着标准输出)。第二个参数是FORMAT语句的行号。可以有更多的参数,你必须仰望的细节在您的FORTRAN版本的OPEN语句。
一些您写的()语句指定要使用的标签“10”里找到的FORMAT语句。但是,你的样品不提供任何格式的语句,因此这将是一个错误。
如果你不想处理的格式声明,您可以使用星号(*)的第二个参数,然后将FORTRAN使用一般默认格式。这就是你的第一个WRITE(,)在做什么。它写到使用的通用格式“标准输出”。