输入文件名并读取数组

时间:2015-01-08 23:49:57

标签: arrays fortran filenames

我在论坛上搜索过但无法找到问题的答案。如果我错过了什么,我很抱歉。所以,这是我的问题:

我的代码如下:

program averagepro
implicit none
real,allocatable,dimension(:) :: a
real :: realfunctionaverage
integer :: i,n
character :: response,filename
print*,'How many numbers would you like to enter?'
read*,n
allocate(a(n))
print*,'Would you like to enter numbers by reading from a file or from the keyboard?'
print*,'Press "F" to enter using a file or "K" to enter from keyboard.'
read*,response
if  (response=='F' .or. response=='f') then
    print*,'Please enter the name correctly, as well as regarding capital letters and file extension: '
    read*,filename
!   print*, filename
!   open(12,file='array.txt')
    open(12,file='filename')
    do  i=1,n
        read(12,*) a(i)
    enddo
elseif  (response=='K'.or. response=='k') then
    print*,'Please enter the numbers, one at each time: '
    do  i=1,n
        read*,a(i)
    enddo
else
    stop
endif
write(*,10) ' The average of the numbers entered are: ',realfunctionaverage(n,a)
10  format(a,2f10.3)
deallocate(a)
end program averagepro 
!--------------------------------------------------------------------------------------------------------
function realfunctionaverage(m,list)
implicit none
integer :: m,i
real,dimension(m) :: list
real :: realfunctionaverage,ans
ans=0
do  i=1,m
    ans=ans+list(i)
enddo
realfunctionaverage=ans/m
end function realfunctionaverage

我尝试从键盘输入文件名时遇到问题。当程序询问文件名时,我将其定义为" array.txt"或"数组&#34 ;;但它会出错并停止运行。我该怎么办?顺便说一句,当我禁用某些行并直接写入" array.txt"的文件名时,程序正常工作。

1 个答案:

答案 0 :(得分:2)

您正在尝试打开名为" filename"的文件。无论用户输入什么。这一行:

open(12,file='filename')

应该是:

open(12,file=filename)

使用引号,它是字符串文字" filename",没有引号,它是名为filename的变量的内容。

您还需要声明变量filename一定长度以容纳文件名。

character(len=256) :: filename

应该适用于大多数用例。如果没有len,则字符变量只能包含一个字符。