由于我的作业受到某些限制,因此使用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
怎么样?这是字符串的长度被写入?
(*,*)
在写(*,*) a
答案 0 :(得分:3)
你可以阅读这里的例子: https://www.obliquity.com/computer/fortran/io.html
要写入的第二个值是隐式格式关键字的参数,该参数是同一程序单元内的语句的标签,包含完整格式说明的字符表达式或数组,或用于列表定向的星号*格式化。
因此,如果您直接提供数据,则可能需要在此处使用*。 否则,你的程序需要有标签10在与格式声明了一些行。
是的,CHARACTER * 20 STR表示变量STR的长度为20,例如,您可以在此处读取:https://www.obliquity.com/computer/fortran/datatype.html
答案 1 :(得分:2)
CHARACTER后的* 20指定CHARACTER变量的大小(在这种情况下为20个字符)。 FORTRAN不使用空终止字符串和其它语言一样,相反,你必须预留固定的字符数。您的实际字符串可以比变量短,但不能长。
在写语句在逗号(,)被用来将各种参数分离。 FORTRAN的某些版本允许您提供“命名的论点,但默认的是第一个参数是文件的代码写入(一个“*”意味着标准输出)。第二个参数是FORMAT语句的行号。可以有更多的参数,你必须仰望的细节在您的FORTRAN版本的OPEN语句。
您的某些WRITE()语句正在指定使用标签'10'上的FORMAT语句。但是您的示例没有提供任何FORMAT语句,因此这将是一个错误。
如果不想处理FORMAT语句,则可以使用星号(*)作为第二个参数,然后FORTRAN将使用常规的默认格式。那就是您的第一个WRITE(,)在做什么。它使用通用格式写入“ stdout”。