我有一个旧的Fortran 77代码,我想在一个F90-Compiler中运行,我的目标是尽可能少地修改代码。它运行得很好,但是代码中的format语句有一些问题。我不明白有什么问题。我使用Eclipse和gfortran。我用自由形式。
问题1
这可以很好地编译:
program HelloWorld
400 FORMAT(7HK GAMMA,2X,G13.5,7H P0,2X,G13.5,6H A1,2X,G13.5)
end program这不编译
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
这也可以很好地编译:
program HelloWorld
400 FORMAT(7HK GAMMA,2X,G13.5,7H P0, &
2X,G13.5,6H A1,2X,G13.5)
end program如果我在最后一个代码中添加更多代码:
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)放置在结束括号后的第三行。
*我不确定“格式字符串”的翻译,因为我的控制台是德语的。
有什么问题吗?
发布于 2014-04-03 12:26:21
在我编写注释时,它看起来更像FORTRAN66而不是77,因为在将CHARACTER数据类型引入语言之前,使用了Hollerith H描述符和数据类型。它还用于将字符数据分配给整数变量,但幸运的是,这是非常罕见的。然而,作为编辑描述符的使用更常见,尽管非常过时。
还不清楚你想要实现什么,好的例子的期望输出将是有帮助的。
你的意思是:
400 FORMAT(7HK GAMMA,2X,G13.5,3H P0,2X,G13.5,3H A1,2X,G13.5) 所以
print 400, 1. ,2. ,3. 输出
K GAMMA 1.0000 P0 2.0000 A1 3.0000或者P0和A1应该作为编辑描述符吗?
遗留软件中的原始代码是什么?
nH Hollerith描述符只是输出n下一个字符,这样它就可以无意地“吃掉”一些描述符并打印它们。
这就是导致示例无法编译的问题,因为在n之前的H太大,而其他格式则没有意义。
下一个可能是
400 FORMAT(8H 'GAMMA',2X,G13.5,5H 'P0',2X,G13.5,5H 'A1',2X,G13.5)打印
'GAMMA' 1.0000 'P0' 2.0000 'A1' 3.0000在Fortran 95及以上的环境中,上述效果更好地实现了
print '(A0,2X,G13.5,A0,2X,G13.5,A0,2X,G13.5)', " 'GAMMA'",1.," 'P0'", 2.0, " 'A1'", 3.0也许你宁愿用:
print '(A0,2X,G13.5,A0,2X,G13.5,A0,2X,G13.5)', "GAMMA",1.,"P0", 2.0, "A1", 3.0印刷用
GAMMA 1.0000 P0 2.0000 A1 3.0000甚至是
print *, "GAMMA",1.,"P0", 2.0, "A1", 3.0发布于 2014-04-03 12:28:11
您的format语句有一个H(用于Hollerith)编辑描述符--格式语句中有一个数字紧跟一个H的东西。描述符的结果是H后面的字符(包括空格),并由输出到文件的前导数字计数。
这一语言特性在Fortran 90中被淘汰,并完全从Fortran 95中的语言中删除。
它们很容易出错。自Fortran 77以来,实现相同结果的一种更好的方法是使用字符常量编辑描述符。
问题是,您有(或正在创建)前面数字所指示的字符数与描述符中字符的实际计数之间的不匹配。例如,下面复制了第二个FORMAT语句,显示了描述符中的七个字符。您可以看到,这在“字符串”中间是如何结束的。这就混淆了编译器对格式规范其余部分的看法。
400 FORMAT(7HK 'GAMMA',2X,G13.5,7H 'P0',2X,G13.5,6H 'A1',2X,G13.5)
1234567https://stackoverflow.com/questions/22837236
复制相似问题