输入文件名并读取数组
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
,字符变量只能容纳一个字符。
我在论坛上进行了搜索,但找不到我的问题的答案。如果我错过了什么,我很抱歉。所以,这是我的问题:
我有如下代码:
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
,字符变量只能容纳一个字符。