输入文件名并读取数组

Enter a file name and read the array

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

我有如下代码:

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"或"array";但它给出了一个错误并停止运行。我应该怎么做?顺便说一句,当我禁用某些行并直接写入文件名 "array.txt" 时,程序可以正常运行。

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

open(12,file='filename')

应该是:

open(12,file=filename)

带引号的是字符串文字 "filename",不带引号的是名为 filename.

的变量的内容

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

character(len=256) :: filename

对于大多数用例应该足够了。如果没有 len,字符变量只能容纳一个字符。