作者sven1130 (绿色狸猫)
看板Fortran
标题[问题] 变数自行改变
时间Mon Sep 9 18:35:03 2019
如题
这个问题困扰我很久了
本鲁使用visual studio
目前我这个程式的架构
是由C++去呼叫一个for的dll
然後跑dll里面众多的subroutine
重点来了
当我跑了六次这个回圈的时候
在跑完!******************************************
标示的该行後
有一个於这个回圈都没有出现的参数NNE(7)
会自动变为一个很奇怪的数字
原本为14跑完後变为一个极大的数字
但该行甚至这个回圈 与参数NNE应该是一点关系也没有
为何会这样 求解 先谢过大家了
附图
https://imgur.com/7kf4X9E
按一下F11逐步执行後变成
https://imgur.com/gznxEKU
完全没有道理啊@@
附上该回圈
DO I=L,1,-1
OPEN(60,FILE='MANNING.DAT',STATUS='OLD')
OPEN(61,FILE='NCCHECH.OUT',STATUS='UNKNOWN')
READ(60,1002) NC
1002 FORMAT(5X,F8.5)
CMN(I,J)=NC
!******************************************
WRITE(61,*)"CMN(",I,",",J,")",CMN(I,J)
!******************************************
!将CMN写入NCCHECH.OUT
READ(IIN,1004) NDS(I,J),XL,XR,LL,LR,LC
1004 FORMAT(8X,F8.0,2F8.2,3F8.0)
C DIST1(I,J)=(LL+LC+LR)/3.0
DIST1(I,J)=(LL+LC+LR)/3.0*3
KK=NDS(I,J)
WRITE(5,1006)J,I,NDS(I,J),XL,XR,DIST1(I,J),CMN(I,J)
1006 FORMAT(//5X,I3,2X,I3,4X,F8.0,2X,F8.2,2X,F8.2,2X,F8.2,2X,F8.4)
READ(IIN,1008)(AY(II,I,J),AX(II,I,J),II=1,KK)
1008 FORMAT(2X,F6.2,9F8.2)
WRITE(5,1978)(AY(II,I,J),AX(II,I,J),II=1,KK)
1978 FORMAT(2X,F6.2,9F8.2)
Z(I,J)=100.0
DO 1010 II=1,KK
IF(AX(II,I,J).EQ.XL) N1(I,J)=II
IF(AX(II,I,J).EQ.XR) N2(I,J)=II
IF(Z(I,J).GE.AY(II,I,J)) THEN
Z(I,J)=AY(II,I,J)
Z919(I,J)=AY(II,I,J)
END IF
1010 CONTINUE
WRITE(5,1012) N1(I,J),N2(I,J),Z(I,J)
c WRITE(*,1012) N1(I,J),N2(I,J),Z(I,J)
1012 FORMAT(5X,I8,2X,I8,2X,F8.2)
END DO
--
作者 pataricky (专发废文) 看板 Gossiping
标题 [问卦] 有没有台南市长荣中学的八卦
时间 Sat Jul 14 20:40:31 2012
1F:推 minoru04:台南市长不是赖清德吗? 怎麽是荣中学?07/14 20:42
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.112.63.241 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Fortran/M.1568025306.A.4F5.html
※ 编辑: sven1130 (140.112.63.241 台湾), 09/09/2019 18:38:03
※ 编辑: sven1130 (140.112.63.241 台湾), 09/09/2019 18:42:34
※ 编辑: sven1130 (140.112.63.241 台湾), 09/09/2019 18:46:37
2F:推 espresso1: 只有NNE(7)改变…@_@a09/13 21:12
其实继续跑之後
NNE的6跟5也会改变
但是4321倒是没有变
顺带一提 我後来试过先把变数用另一个参数
NNNE存起来
等这次错误後再重新写回去NNE
过了两三行 又会自己改变@@
3F:推 fragmentwing: 还没看仔细 不过牵涉到读档09/15 00:14
4F:→ fragmentwing: 先来猜是因为FORTRAN的换行读档问题09/15 00:15
5F:推 fragmentwing: 目前比较在意的是CLOSE的部分 应该都有写在回圈内吧09/15 00:20
6F:推 fragmentwing: 超怪 NNE是输入用的 怎麽会被改变09/15 00:32
7F:推 fragmentwing: 可恶 真的看不出来 只不过既然是第七层09/15 00:42
8F:→ fragmentwing: 我觉得还有一个可能原因09/15 00:42
9F:→ fragmentwing: 有书上说FORTRAN最多只能宣到七维的阵列09/15 00:43
10F:→ fragmentwing: 该不会是因为造成这个限制的原因?09/15 00:43
这个部分我去研究看看好了
感谢指出一盏明灯
11F:→ fragmentwing: 另外那本书上的版本是到f9009/15 00:44
12F:→ fragmentwing: 在想会不会牵涉到背後的机制了09/15 01:06
13F:→ fragmentwing: 楼主附的程式码应该就只有少j那行的do而已09/15 01:06
是的 我的确少附上
另外 由於是修改他人的程式码
我想要让一些变数能够由外部档案读取
而不是写在parameter里
因此原本档案跑起来没问题
但在改的过程 就是卡死在这
搞到後面都无法debug@@
14F:→ fragmentwing: 应该不会构成我们解读上的错误才对09/15 01:07
15F:→ fragmentwing: 阿阿还有close 可是如果是close出问题09/15 01:08
16F:→ fragmentwing: 不会第七次才出现问题啊09/15 01:08
先感谢各位版友的回覆
我近期也还没找出解答呜呜
我也觉得这个问题很怪
※ 编辑: sven1130 (27.52.224.14 台湾), 09/15/2019 03:40:10
17F:→ fragmentwing: 楼主 我问一个很过分的问题 09/15 07:24
18F:→ fragmentwing: 楼主知道在fortran 不管是function 或是subroutine 09/15 07:24
19F:→ fragmentwing: 其变数改变也会改变主程式的变数这件事吧 说到fort09/15 07:24
20F:→ fragmentwing: ran最异於其他程式语言就是这点了09/15 07:24
阿不对 您说的这部分我知道
就是变数经过计算後 传回去是计算後的值
说来惭愧 我以为这是正常的
在其他语言 我好像还没用到副程式过xddd
所以就认为fortran跟大家一样
※ 编辑: sven1130 (27.52.224.14 台湾), 09/15/2019 13:35:49
※ 编辑: sven1130 (27.52.224.14 台湾), 09/15/2019 13:45:07
21F:推 fragmentwing: 我觉得楼主很快就会需要建立fortran对c的对照表XD09/15 14:20
22F:→ fragmentwing: continue goto target 一堆东西都不一样 尤其指标相09/15 14:20
23F:→ fragmentwing: 关最夸张 而且FORTRAN 可是从1开始的异世界 其他语09/15 14:20
24F:→ fragmentwing: 言阵列宣告从第零项居多09/15 14:20
25F:→ fragmentwing: 当初学fortran时有些概念的问题需要请教 然後教我的09/15 14:22
26F:→ fragmentwing: 人是学C++的 两边对话起来都要稍微翻译一下成对方的09/15 14:22
27F:→ fragmentwing: 语言写法w09/15 14:22
豪 谢谢f大给我这麽多建议~
※ 编辑: sven1130 (27.52.224.14 台湾), 09/15/2019 14:37:02