gpt4 book ai didi

fortran - Fortran 格式描述符的问题

转载 作者:行者123 更新时间:2023-12-05 02:36:45 27 4
gpt4 key购买 nike

我正在学习 Fortran,在使用格式编写时发现了一些奇怪的东西(我使用的是 Fortran onlinegdb)

Program Hello
real, dimension(3,2):: array
array = 0
write(*, '(A,/, A,/, F5.2, F5.2)') &
"1","2",((array(i, j), i = 1,3), j = 1,2)
End Program Hello

我以为

1
2
0.00 0.00
0.00 0.00
0.00 0.00

我明白了

1
2
0.00 0.00

0.00 0.00

怎么了?

最佳答案

弗拉基米尔 F 是 correct在说给定的格式不适合为输出提供的项目时:在写入两个实际值后进行格式转换,控件返回查看编辑描述符 A 但与之对应的是' 另一个字符变量。这是不允许的。

但是,该其他答案的较早版本中建议的格式也没有提供您期望的输出。如果你想根据无限重复规范在每一行上写成对的数字,你需要明确地将文件定位放入格式中:

write(*, '(2(A,/),*(2F5.2,:,/))') "1", "2", transpose(array)

如果最后没有 / 编辑,重复将意味着数组的所有元素都在同一条记录中。我们还有 : ,所以我们 don't get an extra line break在最后一个数组元素之后。

(我还转置输出数组,因为这可能就是你真正的意思。原始输出中隐含的 do 循环有点出乎意料,并且在最终索引上移动更有意义首先。)

对于有限的重复规范,如该答案的更正形式所示,格式反转确实意味着定位:

write(*, '(2(A,/), 2(F5.2))') "1","2", transpose(array)

在处理完 2(F5.2) 后,在仍有元素要写出的情况下,回滚重用了它。

总而言之,如果您依靠格式还原来“跳过”格式的较早部分同时保留新记录,则必须正确标记整个格式的部分以还原为使用括号。只有整个格式被括号括起来,没有其他格式,格式还原会重用整个格式。

关于fortran - Fortran 格式描述符的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70188638/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com