使用 CodeBlocks IDE 读取 Fortran 文件时出现问题
Problem when reading Fortran file with CodeBlocks IDE
最近开始学习Fortran编程语言。
我在 GNU Fortran 编译器中使用 CodeBlocks IDE。
我在解释如何从文件读取和写入的 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' 的第一行
read(10,*) c1,n,c2
真不知道该怎么办。代码对我来说似乎很简单,我以前从未见过这个错误消息,所以我不知道它是什么意思。
提前感谢您的回答。
这不是答案,但评论的文字太多了。
在我的电脑上 运行 没问题。
可以用
编译吗
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
那也可以给你一些提示。
谢谢大家的回复。
实际上导致问题的原因是我使用的是旧编译器。因此,当我下载最新版本时,无需更改代码中的任何行,它都能完美运行。
最近开始学习Fortran编程语言。 我在 GNU Fortran 编译器中使用 CodeBlocks IDE。
我在解释如何从文件读取和写入的 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' 的第一行
read(10,*) c1,n,c2
真不知道该怎么办。代码对我来说似乎很简单,我以前从未见过这个错误消息,所以我不知道它是什么意思。
提前感谢您的回答。
这不是答案,但评论的文字太多了。
在我的电脑上 运行 没问题。
可以用
编译吗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
那也可以给你一些提示。
谢谢大家的回复。 实际上导致问题的原因是我使用的是旧编译器。因此,当我下载最新版本时,无需更改代码中的任何行,它都能完美运行。