看板 Fortran 關於我們 聯絡資訊
如題 這個問題困擾我很久了 本魯使用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
minoru04:台南市長不是賴清德嗎? 怎麼是榮中學?07/14 20:42
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.63.241 (臺灣) ※ 文章網址: https://www.ptt.cc/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
espresso1: 只有NNE(7)改變…@_@a09/13 21:12
其實繼續跑之後 NNE的6跟5也會改變 但是4321倒是沒有變 順帶一提 我後來試過先把變數用另一個參數 NNNE存起來 等這次錯誤後再重新寫回去NNE 過了兩三行 又會自己改變@@
fragmentwing: 還沒看仔細 不過牽涉到讀檔09/15 00:14
fragmentwing: 先來猜是因為FORTRAN的換行讀檔問題09/15 00:15
fragmentwing: 目前比較在意的是CLOSE的部分 應該都有寫在迴圈內吧09/15 00:20
fragmentwing: 超怪 NNE是輸入用的 怎麼會被改變09/15 00:32
fragmentwing: 可惡 真的看不出來 只不過既然是第七層09/15 00:42
fragmentwing: 我覺得還有一個可能原因09/15 00:42
fragmentwing: 有書上說FORTRAN最多只能宣到七維的陣列09/15 00:43
fragmentwing: 該不會是因為造成這個限制的原因?09/15 00:43
這個部分我去研究看看好了 感謝指出一盞明燈
fragmentwing: 另外那本書上的版本是到f9009/15 00:44
fragmentwing: 在想會不會牽涉到背後的機制了09/15 01:06
fragmentwing: 樓主附的程式碼應該就只有少j那行的do而已09/15 01:06
是的 我的確少附上 另外 由於是修改他人的程式碼 我想要讓一些變數能夠由外部檔案讀取 而不是寫在parameter裡 因此原本檔案跑起來沒問題 但在改的過程 就是卡死在這 搞到後面都無法debug@@
fragmentwing: 應該不會構成我們解讀上的錯誤才對09/15 01:07
fragmentwing: 阿阿還有close 可是如果是close出問題09/15 01:08
fragmentwing: 不會第七次才出現問題啊09/15 01:08
先感謝各位版友的回覆 我近期也還沒找出解答嗚嗚 我也覺得這個問題很怪 ※ 編輯: sven1130 (27.52.224.14 臺灣), 09/15/2019 03:40:10
fragmentwing: 樓主 我問一個很過分的問題 09/15 07:24
fragmentwing: 樓主知道在fortran 不管是function 或是subroutine 09/15 07:24
fragmentwing: 其變數改變也會改變主程式的變數這件事吧 說到fort09/15 07:24
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
fragmentwing: 我覺得樓主很快就會需要建立fortran對c的對照表XD09/15 14:20
fragmentwing: continue goto target 一堆東西都不一樣 尤其指標相09/15 14:20
fragmentwing: 關最誇張 而且FORTRAN 可是從1開始的異世界 其他語09/15 14:20
fragmentwing: 言陣列宣告從第零項居多09/15 14:20
fragmentwing: 當初學fortran時有些概念的問題需要請教 然後教我的09/15 14:22
fragmentwing: 人是學C++的 兩邊對話起來都要稍微翻譯一下成對方的09/15 14:22
fragmentwing: 語言寫法w09/15 14:22
豪 謝謝f大給我這麼多建議~ ※ 編輯: sven1130 (27.52.224.14 臺灣), 09/15/2019 14:37:02