2017-04-05 22 views
0

全部。我正在寫一個相對簡單的程序,它遍歷數據列表並返回學校項目的峯值。使用Fortran的Eclipse上無控制檯輸出

這裏是到目前爲止的代碼:

program Fortran_Project_1 
    implicit none 
    integer::cnt,cnt1, i 
    integer:: peaks=5 
    real, dimension(360):: time,impulse 
    real, allocatable :: impulselist(:) 
    integer, dimension(360)::interval 
    character(len=150)::clean,header 
    clean='C:\Users\User\Desktop\Fortran_Project_1\ir_clean.txt' 
    print *, clean 

    open (unit=1,file=clean) 

    do cnt1=1,4 
     read (1,*) header 
    end do 

    do cnt=1,443 
     read(1,*) interval(cnt),time(cnt),impulse(cnt) 
    end do 
    print *, 'Choose amount of peaks to find' 
    read *, peaks 
    deallocate (impulselist) 
    allocate (impulselist(peaks)) 
    do i = 1, cnt 
     if (impulse(i)>impulse(i+1) .and. impulse(i)>impulse(i-1)) then 
       peaks = peaks - 1 
       impulselist(peaks) = impulse(i) 
     end if 
     if (peaks < 1) then 
      exit 
     end if 
    end do 
    close (1) 
    print *, impulselist 
end program Fortran_Project_1 

不管怎麼說,運行此和輸入峯的用戶想要找到的量時,控制檯是完全空白。它打印乾淨的變量和查詢,但僅此而已。我該怎麼辦?

謝謝

編輯:控制檯輸出:

C:\用戶\用戶\桌面\ Fortran_Project_1 \ ir_clean.txt
選擇峯值量找到

【輸入】

+0

確切輸出的副本,將有助於爲您介紹的說明。 –

+0

當然可以!更新。 – CaptainSirsir

+0

使用邊界檢查進行編譯也可能會發現一些問題(例如,間隔的大小爲360,並且被填充直到不存在,元素443)。 – albert

回答

0

我想通了。列表維度存在問題。以下是更新完美的代碼。

程序Fortran_Project_1 隱無 整數:: CNT,CNT1,我,COUNT1,羣峯 實,尺寸(1000)::時間,脈衝 實際,分配:: impulselist(:),timelist(:) 整數,尺寸(1000)::間隔 字符(len = 150):: clean,標頭 clean ='C:\ Users \ Buraaq Alrawi \ Desktop \ Fortran_Project_1 \ ir_clean.txt' print *,clean print *, '選擇峯的量找到' 讀*,羣峯 分配(impulselist(峯)) 分配(timelist(峯))

open (unit=1,file=clean,action='read') 

do cnt1=1,4 
    read (1,*) header 
end do 

do cnt=1,501 
    read(1,*) interval(cnt),time(cnt),impulse(cnt) 
end do 

count1=1 
do i = 1, cnt 
    if (impulse(i)>impulse(i+1) .and. impulse(i)>impulse(i-1)) then 
      impulselist(count1) = impulse(i) 
      timelist(count1) = time(i) 
      count1 = count1 + 1 
    end if 
    if (count1 > peaks) then 
     exit 
    end if 
end do 
close (1) 
100 format(A28,X,1000F10.2) 
200 format(A28,X,1000F10.4) 
300 format(A23,F10.2,F10.4) 
write (*,100) 'The peak times are(seconds):', timelist 
write (*,200) 'The peak impulse values are:', impulselist 
write (*,300) 'The settled values are:',time(501),impulse(501) 

端程序Fortran_Project_1

謝謝大家

+0

那麼解除分配發生了什麼? –

0

奇怪的是,你說什麼都沒有發生。您應該收到錯誤消息。

數組impulselist未分配,您打電話給deallocate(impulselist)。這是不允許的,應該由編譯器進行診斷,並且在代碼運行時應該抱怨。

+0

噢好吧。我該如何解決這個問題?當擺脫deallocate(impulselist)它告訴我陣列已被分配。 – CaptainSirsir

+0

向我們展示** exact **錯誤消息和代碼。在你顯示的代碼中沒有辦法將它分配到該行。 –

+0

我已經顯示了確切的錯誤和代碼。這就是我擁有的所有信息。我在另一臺電腦上運行它,遇到了同樣的問題。 – CaptainSirsir