爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 2854|回复: 6

[求助] 求大神帮忙看看问题到底是什么

[复制链接]

新浪微博达人勋

发表于 2016-4-14 14:25:03 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
program tiqu
integer,parameter::m=54,day=22646,yr=62,dd=92*62,yrd=92  
character*5 id(m)
character*4 yrc
integer year(m,day),mon(m,day),dy(m,day),temp,tmax,tmin,rain(m,day)
integer year1(m,dd),mon1(m,dd),dy1(m,dd),rain1(m,dd)
real rainyr(1951:2013)
integer a(1951:2013)
integer i,yrn
!!!!!!读入站点名!!!!!!
open(10,file='f:\fortran\shuju\54sta.txt')
read(10,*) (id(i),i=1,m)
do i=1,m
   j=1
!!!!!!读入51-12年数据!!!!!!
    open(33,file='f:\fortran\shuju\51-13\'//id(i)//'.txt')
100 read(33,*) id(i),year(i,j),mon(i,j),dy(i,j),rain(i,j)
     j=j+1
if(.not.eof(33)) goto 100
enddo
!!!!!!提取3-5月降水!!!!!!
do i=1,m
   open(44,file='f:\fortran\shuju\51-13\'//id(i)//'.txt')
   do j=1,day
   if(mon(i,j).ge.4.and.mon(i,j).le.6) then
   if(rain(i,j)>=30000) then
   rain(i,j)=0.0
   end if
   if(rain(i,j)==-32744.or.rain(i,j)==32744.or.rain(i,j)==32766.or.rain(i,j)==-32766) then
      rain(i,j)=0.0
   end if     
   write(44,*) id(i),year(i,j),mon(i,j),dy(i,j),rain(i,j)  !按台站存放!
   endif
enddo
close(44)
enddo
!!!!!!按年存放!!!!!!
do i=1,m
open(100,file='f:\fortran\shuju\51-13\'//id(i)//'.txt')
do j=1,day
    read(100,*) id(i),year1(i,j),mon1(i,j),dy1(i,j),rain1(i,j)
enddo
enddo
j=1
do yrn=1961,2012
rainyr(yrn)=0.0
write(yrc,'(i4)') yrn
open(200,file='f:\fortran\753shuju\753\yearly\'//yrc//'.txt')
jj=j
do i=1,m
    j=jj
400    if(year1(i,j)==yrn) then
    write(200,*) id(i),year1(i,j),mon1(i,j),dy1(i,j),rain1(i,j)
    rainyr(yrn)=rainyr(yrn)+rain1(i,j)
    j=j+1
    if(j<=day)  goto 400
    endif
enddo
rainyr(yrn)=rainyr(yrn)/54.0/10.0
enddo
open(200,file='f:\fortran\shuju\yr_ave.txt')
write(200,*) (rainyr(i),i=1951,2012)
end
每次运行后都出现这个

数据格式是这样的

51053 1978 4 30 163 226 108 0
51053 1978 5 1   153 235 70  0
51053 1978 5 2   146 222 85 32700
51053 1978 5 3   162 250 70 0
51053 1978 5 4   135 244 73 5
51053 1978 5 5   104 162 52 0
51053 1978 5 6   115 185 55 0
51053 1978 5 7   132 206 50 0
51053 1978 5 8   156 228 46 0
51053 1978 5 9   190 254 87 0
51053 1978 5 10 170 251 83 0
51053 1978 5 11 154 234 60 0
51053 1978 5 12 149 226 85 0
求大神们帮帮忙啊!!!
QQ图片20160414142231.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-4-14 14:45:35 | 显示全部楼层
好像楼主的文件只有open(33,file='f:\fortran\shuju\51-13\'//id(i)//'.txt')
没有close(33)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-4-14 14:49:38 | 显示全部楼层
四叶草 发表于 2016-4-14 14:45
好像楼主的文件只有open(33,file='f:\fortran\shuju\51-13\'//id(i)//'.txt')
没有close(33)

加上了还是不行。。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-4-14 14:55:47 | 显示全部楼层
lz这是读第一个文件就跪了么?可以把后面的全都注释掉,在read后紧跟个write或print到频幕,看看到底有没有读进去
好长时间没碰Fortran,如果我没记错,这个循坏顺序似乎也不是那种比较高效的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-4-14 15:04:07 | 显示全部楼层
如若 发表于 2016-4-14 14:49
加上了还是不行。。。

那你只有一步一步调试了,这种现象就是说文件已读到尾,你还要继续read就不行了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-4-14 15:09:43 | 显示全部楼层
我没用过 eof(fileid) 这个函数,不清楚具体的
如果让我判断是否到文末,我会在read里加,
  1. do XXXXX
  2.    read(33,*,iostat=status) XXXXXX
  3.    if (status/=0) exit
  4. end do


里面的status要记着在前面补充声明一下,status=0是正常,小于0是文末,大于是崩了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-4-16 20:52:14 | 显示全部楼层
weinihou 发表于 2016-4-14 14:55
lz这是读第一个文件就跪了么?可以把后面的全都注释掉,在read后紧跟个write或print到频幕,看看到底有没有 ...

加了write后运行还是出的上面那个图。。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表