试图写入字符串中的子程序导致错误

时间:2019-02-02 18:21:55

标签: fortran fortran77

由于我的作业受到某些限制,因此使用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号语句”

另外,我还有其他问题:

  1. *20CHARACTER*20 STR中是什么意思? 这是字符串的大小吗?

  2. 10中的WRITE (*,10) STR怎么样?这是字符串的长度被写入?

  3. (*,*)在写(*,*) a

  4. 中是什么意思

2 个答案:

答案 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”。