2014-04-01 35 views
1

我有以下代碼:Fortran 90的錯誤:輸入需要太多的數據

if (complex) then 
read(unitvector) (CoefC(jl),jl=1,NV) 
endif 

當一個用戶表示,如果數據是複數的集合。現在,如果用戶指出它是,但它實際上不是,我得到錯誤67(輸入需要太多的數據)。我怎麼能夠陷入困境,所以我可以寫出,也許用戶犯了一個錯誤。我在想它會看起來像這樣:

read(unitvector, ioStat=iocplx) (CoefC(jl),jl=1,NV) 

但我在哪裏會把「如果」檢查錯誤?

+0

不回答你的問題,但讀取的簡單語法被讀取(unitvector)CoefC(1:NV) – Fortranner

+0

通常也更快。 –

+0

它確實有用,謝謝。 –

回答

1

這取決於程序的整體邏輯,我們無法通過這樣的小代碼片段告訴你最好的方法。你可以嘗試像(未測試):

if (complex) then 
    read(unitvector, ioStat=iocplx) (CoefC(jl),jl=1,NV) 
    if (iocplx/=0) stop "Error reading the complex data." 
end if 

if (complex) then 
    read(unitvector, ioStat=iocplx) (CoefC(jl),jl=1,NV) 
    if (iocplx/=0) then 
    write(*,*) "Error reading the complex data, triung real." 
    complex = .false. 
    backspace(unitvector) 
    read(unitvector, ioStat=ioreal) (CoefR(jl),jl=1,NV) 
    if (ioreal/=0) then 
     stop "Error reading real data." 
    end if 
    end if 
end if 

但你真的沒有指定你想要的,停止該程序,寫一個有意義的消息?以其他方式讀取數據?一切皆有可能,我們沒有水晶球。

+0

謝謝。我只是不確定語法。由於read(unitvector)(CoefC(jl),jl = 1,NV)就像一個自持循環,所以我不確定在哪裏粘貼IF語句,因爲它在程序崩潰之前先執行。你的答案的第一部分就是我正在尋找的東西。謝謝。 –