使用CodeBlocks IDE读取Fortran文件时出现问题

时间:2018-10-02 18:16:57

标签: fortran codeblocks

最近,我已经开始学习Fortran编程语言。 我正在将CodeBlocks IDE与GNU Fortran编译器一起使用。

我在网上的Fortran课程中发现了一个简单的代码问题,该问题解释了如何从文件读取和写入。

程序如下:

program main
implicit none

character (len=14) :: c1,c2,c3
integer :: n
real :: T

open(unit=10,file='titi.txt')
read(10,*) c1,n,c2
read(10,*) c3,T
close(10)


open(unit=20,file='toto.txt')
write(20,*) c1,'il est',n,c2
write(20,*)'la',c3,'est de',T,'degres'
close(20)

end

文件“ titi.txt”包含:

bonjour 4   heures
temperature 37.2

控制台中显示的错误消息如下:

 Program received signal SIGSEGV: Segmentation fault - invalid memory 
 reference.

 Backtrace for this error:
 #0  ffffffff

我尝试使用标志

  -g

然后我使用调试器发现问题出在使用“读取”的第一行

  read(10,*) c1,n,c2

我真的不知道该如何处理。该代码对我来说似乎很简单,而且我以前从未见过此错误消息,所以我不知道这是什么意思。

非常感谢您的回答。

2 个答案:

答案 0 :(得分:1)

谢谢大家的回应。 实际上导致问题的原因是我使用的是旧的编译器。因此,当我下载最新版本时,所有功能都可以完美运行而无需更改代码中的任何行。

答案 1 :(得分:0)

这不是答案,但这是太多的评论内容。

它在我的计算机上运行良好。

可以用

编译吗
gfortran -g -O0 -fbacktrace -Wall -fcheck=all

这样,您应该获得更多的信息。另外,您可以添加一些错误检查:

添加以下变量:

integer :: ios
character(len=100) :: iomsg

然后,您可以向所有io语句添加错误检查,如下所示:

read(10,*) c1,n,c2

成为:

read(10,*,iostat=ios,iomsg=iomsg) c1,n,c2
if (ios /= 0) then
    print*, "Error reading c1, n, c2:"
    print*, trim(iomsg)
    STOP
end if

这也可以给您一些提示。