首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fortran:两行的FORMAT语句

Fortran:两行的FORMAT语句
EN

Stack Overflow用户
提问于 2014-04-03 12:06:38
回答 2查看 1.3K关注 0票数 1

我有一个旧的Fortran 77代码,我想在一个F90-Compiler中运行,我的目标是尽可能少地修改代码。它运行得很好,但是代码中的format语句有一些问题。我不明白有什么问题。我使用Eclipse和gfortran。我用自由形式。

问题1

这可以很好地编译:

代码语言:javascript
复制
program HelloWorld
400   FORMAT(7HK GAMMA,2X,G13.5,7H P0,2X,G13.5,6H A1,2X,G13.5) 
end program

这不编译

代码语言:javascript
复制
program HelloWorld
400   FORMAT(7HK 'GAMMA',2X,G13.5,7H 'P0',2X,G13.5,6H 'A1',2X,G13.5)
                                       1
end program

错误是

在(1)处的格式字符串中,P描述符需要前导比例因子。

(错误是从德语翻译出来的,可能不是完全相同的英文单词)怎么回事?

问题2

这也可以很好地编译:

代码语言:javascript
复制
program HelloWorld
400   FORMAT(7HK GAMMA,2X,G13.5,7H P0, &
      2X,G13.5,6H A1,2X,G13.5)
end program

如果我在最后一个代码中添加更多代码:

代码语言:javascript
复制
program HelloWorld
400   FORMAT(7HK GAMMA,2X,G13.5,7H P0,2X,G13.5,6H A1,2X,G13.5, &
      2X,7HK,ALPHA-1,2X,G13.5,7H  BETA-4,2X,G13.5 )
end program

它不再编译了。错误是:

预期格式字符串* at (1)中的P编辑描述符

而(1)放置在结束括号后的第三行。

*我不确定“格式字符串”的翻译,因为我的控制台是德语的。

有什么问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-03 12:26:21

在我编写注释时,它看起来更像FORTRAN66而不是77,因为在将CHARACTER数据类型引入语言之前,使用了Hollerith H描述符和数据类型。它还用于将字符数据分配给整数变量,但幸运的是,这是非常罕见的。然而,作为编辑描述符的使用更常见,尽管非常过时。

还不清楚你想要实现什么,好的例子的期望输出将是有帮助的。

你的意思是:

代码语言:javascript
复制
400   FORMAT(7HK GAMMA,2X,G13.5,3H P0,2X,G13.5,3H A1,2X,G13.5) 

所以

代码语言:javascript
复制
print 400, 1. ,2. ,3. 

输出

代码语言:javascript
复制
K GAMMA     1.0000     P0     2.0000     A1     3.0000

或者P0和A1应该作为编辑描述符吗?

遗留软件中的原始代码是什么?

nH Hollerith描述符只是输出n下一个字符,这样它就可以无意地“吃掉”一些描述符并打印它们。

这就是导致示例无法编译的问题,因为在n之前的H太大,而其他格式则没有意义。

下一个可能是

代码语言:javascript
复制
400   FORMAT(8H 'GAMMA',2X,G13.5,5H 'P0',2X,G13.5,5H 'A1',2X,G13.5)

打印

代码语言:javascript
复制
 'GAMMA'     1.0000     'P0'     2.0000     'A1'     3.0000

在Fortran 95及以上的环境中,上述效果更好地实现了

代码语言:javascript
复制
print '(A0,2X,G13.5,A0,2X,G13.5,A0,2X,G13.5)', " 'GAMMA'",1.," 'P0'", 2.0, " 'A1'", 3.0

也许你宁愿用:

代码语言:javascript
复制
print '(A0,2X,G13.5,A0,2X,G13.5,A0,2X,G13.5)', "GAMMA",1.,"P0", 2.0, "A1", 3.0

印刷用

代码语言:javascript
复制
GAMMA     1.0000     P0     2.0000     A1     3.0000

甚至是

代码语言:javascript
复制
print *, "GAMMA",1.,"P0", 2.0, "A1", 3.0
票数 0
EN

Stack Overflow用户

发布于 2014-04-03 12:28:11

您的format语句有一个H(用于Hollerith)编辑描述符--格式语句中有一个数字紧跟一个H的东西。描述符的结果是H后面的字符(包括空格),并由输出到文件的前导数字计数。

这一语言特性在Fortran 90中被淘汰,并完全从Fortran 95中的语言中删除。

它们很容易出错。自Fortran 77以来,实现相同结果的一种更好的方法是使用字符常量编辑描述符。

问题是,您有(或正在创建)前面数字所指示的字符数与描述符中字符的实际计数之间的不匹配。例如,下面复制了第二个FORMAT语句,显示了描述符中的七个字符。您可以看到,这在“字符串”中间是如何结束的。这就混淆了编译器对格式规范其余部分的看法。

代码语言:javascript
复制
400   FORMAT(7HK 'GAMMA',2X,G13.5,7H 'P0',2X,G13.5,6H 'A1',2X,G13.5)
               1234567
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22837236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档