gpt4 book ai didi

arrays - "character*10::a"和 "character::a(10)"之间的区别

转载 作者:行者123 更新时间:2023-12-02 07:17:42 33 4
gpt4 key购买 nike

在尝试刷新我的项目的 Fortran 90 知识时,我在使用内部文件时遇到了一些奇怪的情况。考虑示例代码:

! ---- internal_file_confusion.f90 ----
program internal_file_confusion
implicit none

character*40 :: string1
character :: string2(40)

write(string1, *) "Hello World 1"
write(*,*) "string1 = ", string1

write(string2, *) "Hello World 2"
write(*,*) "string2 = ", string2

end program

使用 gfortran 编译时会崩溃,写入 STDOUT

 string1 =  Hello World 1                          
At line 10 of file e:/Daten/tmp/fortran-training/internal_file_confusion.f90
Fortran runtime error: End of record

当使用*length 表示法声明时,字符数组可用于内部写入,但当使用name(length) 表示法声明时则不能。此外,我注意到 *length 表示法似乎只允许用于字符数组,而禁止使用像

这样的错误消息
Error: Old-style type declaration INTEGER*40 not supported at (1)

对于其他数据类型。

这些符号之间有什么区别?为什么它会影响作为内部文件的使用?

最佳答案

character*40::string是长度为40的字符串

character::string*40相同

character(len=40)::string也是长度为40的字符串

character::string(40) 是一个由 40 个长度为 1 的字符串组成的数组

character*40::string(40) 是一个由 40 个长度为 40 的字符串组成的数组

character::string(40)*40相同

character(len=40)::string(40) 是一个由 40 个长度为 40 的字符串组成的数组

您的第二次内部写入失败,因为它写入了数组 string2 中的第一个字符串。第一个字符串 string2(1) 只有 1 个字符长,而且太短了。因此,您会收到记录结束错误条件,消息对于提供的字符串来说太长。

内部写入将数组元素视为单独的记录(类似于单独的行)。如果有更多记录(行)要写入数组,则可以在内部写入中使用字符串数组。

关于arrays - "character*10::a"和 "character::a(10)"之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33415590/

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