作者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/m.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