试图写在子程序引起的错误字符串

问题描述 投票:2回答:2

由于我的任务有一定的约束,使用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. 是什么(*,*)意味着WRITE (*,*) a
fortran fortran77
2个回答
3
投票

正如你可以阅读这里的例子:https://www.obliquity.com/computer/fortran/io.html

给写所述第二值是隐式格式关键字,它是语句的相同程序单元,字符表达式或阵列包含完整格式规范,或星号*为列表式的格式内的标签的参数。

因此,如果你直接提供的数据,你可能要改为*那里使用。否则,你的程序需要在与格式声明了一些行有标签10。

是的,CHARACTER * 20 STR意味着该变量STR的长度是20的,因为你可以阅读例如在这里:https://www.obliquity.com/computer/fortran/datatype.html


2
投票

字符后的* 20指定字符变量的大小(在此情况下20个字符)。 FORTRAN不使用空终止字符串和其它语言一样,相反,你必须预留固定的字符数。您的实际字符串可以比可变短,但从来没有更长的时间。

在写语句中的逗号(,)用于各种参数分开。 FORTRAN的某些版本允许您提供“命名的论点,但默认的是第一个参数是文件的代码写入(一个“*”意味着标准输出)。第二个参数是FORMAT语句的行号。可以有更多的参数,你必须仰望的细节在您的FORTRAN版本的OPEN语句。

一些您写的()语句指定要使用的标签“10”里找到的FORMAT语句。但是,你的样品不提供任何格式的语句,因此这将是一个错误。

如果你不想处理的格式声明,您可以使用星号(*)的第二个参数,然后将FORTRAN使用一般默认格式。这就是你的第一个WRITE(,)在做什么。它写到使用的通用格式“标准输出”。

© www.soinside.com 2019 - 2024. All rights reserved.