Fortranコンパイルエラーについて

このQ&Aのポイント
  • Fortranでコンパイルを行った際にエラーが発生し、解決策がわからない状況です。
  • エラーメッセージは、ELSEステートメントの後に予期しないトークンがあるというものです。
  • 実行ファイルを作成する際にもエラーが発生し、解決方法がわからない状況です。
回答を見る
  • ベストアンサー

Fortran コンパイルエラーについて

Fortranでコンパイルを行ったところ下記のエラーが発生し、原因がわからずにいます。 Fortranに関しては全くの初心者です。 コマンドプロンプト ----------------- C:\>g95 aaa.f90 Warning(115):Line 100 of aaa.f90 is being truncated In file aaa.f90:100  else if(hnum(mnum(ic-1,jc-1)) .eq. 45 .and. basin_num(nr) .eq. anum(mnum(ic-1,jc-1)) .and. znum(mnum(ic-1,jc-1)) .eq. 'obs') then 1 Error:Unexpected junk after ELSE statement at (1) aaa.f90ファイルは他の方が作成したものでそのaaa.exeもあるので、見よう見まねで Fortranをインストールし、試みましたがエラーでEXEが作成されませんでした。 Fortranはv4.1.2(g95 0.93)、使用しているOSはWindows7Professional(32ビット)です。 エラーがでている行のコードしか記述できず申し訳ないのですが、エラーの意味だけでも教えていただけますでしょうか。 ご教示頂きますようよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8018/17137)
回答No.1

Line 100 of aaa.f90 is being truncated ということは100行目が途中(132カラム)までしか読み込まれていません。 したがってelse if文が完結せずにわけのわからない文になっているわけです。 else if(hnum(mnum(ic-1,jc-1)) .eq. 45 .and. basin_num(nr) .eq. anum(mnum(ic-1,jc-1)) .and. znum(mnum(ic-1,jc-1)) .eq. 'obs') then これをたとえば else if(hnum(mnum(ic-1,jc-1)) .eq. 45 .and. basin_num(nr) .eq. anum(mnum(ic-1,jc-1)) & & .and. znum(mnum(ic-1,jc-1)) .eq. 'obs') then と2行に分ければうまくいくでしょう。

ugugokana
質問者

お礼

本当に本当にありがとうございます><。。 エラーの詳細まで教えていただきありがとうございました。

関連するQ&A

  • FORTRANコンパイル時について

    土木の設計でFORTRANで書かれたプログラムを使用しているのですが,コンパイルする際に下記内容のエラー(?)が出ていますが,コンパイル自体は完了しています。 これって何かオカシイのでしょうか。 ■C:\Documents and Settings\ETP5\デスクトップ\programs_2D> ftn77 /link elastc.f [Salford FTN77/Win32 v4.03, Copyright (c) Salford Software Ltd. 1988-1998] Licensed to: FTN77 Personal Edition Department: Non-commercial use only 0130) END COMMENT - STXY has not been used COMMENT - SSIY has not been used COMMENT - SSIX has not been used NO ERRORS,3 COMMENTS [<ELASTC2D>FTN77 Ver 4.03] NO ERRORS [<DATA_IN>FTN77 Ver 4.03] NO ERRORS [<FIX>FTN77 Ver 4.03] NO ERRORS [<INIT>FTN77 Ver 4.03] NO ERRORS [<CALC_SIG>FTN77 Ver 4.03] 0391) IF((TK(K,I-K+1).EQ.0.D0).OR.(X(K).EQ.0.D0)) GOTO 2 WARNING - The use of .EQ. or .NE. with non-integer operands can produce misleading results WARNING - The use of .EQ. or .NE. with non-integer operands can produce misleading results NO ERRORS,2 WARNINGS [<LEQ>FTN77 Ver 4.03] NO ERRORS [<LEQ1>FTN77 Ver 4.03] NO ERRORS [<MAKE_GAMX>FTN77 Ver 4.03] NO ERRORS [<CALC_TF>FTN77 Ver 4.03] NO ERRORS [<MAKE_TK>FTN77 Ver 4.03] NO ERRORS [<WRITE_SUB>FTN77 Ver 4.03] Creating executable: elastc.exe 宜しくお願い致します。

  • fortranのif文にでるエラーがわかりません。

    c termination test sorce=amax1(resorm,resoru,resorv) 310 if((niter.eq.20.and.sorce.gt.1.0e7*sormax) & .or.(niter.eq.maxit)) then write(6,320) 320 format & (1h ,'solution diverges or needs more iterations'/) if(sorce.gt.sormax) go to 300 c----- end of iterations 文献に載っていたプログラムのメインプログラムの一部です。 310のif文に対してでるエラーの意味が どうしてもわかりません。 fortranのコンパイルのエラーに関してはだいたいはわかっているつもりなのですが・・・ 理由がわかるかたいらしたら教えていただけませんか? よろしくお願いします。

  • FORTRAN77でプログラミング

    今年、大学の授業でFORTRAN77を使ったプログラミングを勉強することになりました。 今で3回授業が終わったところなのですが、いきなりつまずいてしまい皆さんの知恵をお借りしたいと思います。。 作るプログラムは 問:摂氏(C)、華氏(F)、絶対温度(K)のいずれかの値を { xx(温度の数値),yy(CかFかK) }のように入力したときに、入力した値以外の単位での温度値が表示されるプログラムを作れ。 自分なりに作ってみたのが下のプログラムです。 全く論外なプログラミングをしているかもしれませんが…。 (自作) c234567 implicit none real n,cx,fx,kx character*1 d,c,f,k c n:入力値 d:入力された温度の値 C:摂氏 F:華氏 K:絶対温度 write(*,*) '温度値、単位を表す文字を入力してください。' read(*,*)n,d if(d.eq.c)then cx=n fx=cx*(9/5)+32 kx=cx+273.15 else if(d.eq.f)then fx=n cx=(fx-32)*(5/9) kx=cx+273.15 else kx=n cx=kx-273.15 fx=cx*(9/5)+32 end if end if write(*,50) cx,'C',fx,'F',kx,'K' 50 format(' ',f7.3,a3,f7.3,a3,f7.3,a3) stop end これをどうしたらいいのでしょうか。 ちなみに、使用しているFORTRAN77は Compaq Visual Fortran Optimizing Compiler Version 6.1 です。 どうぞよろしくお願いします。

  • VineでFORTRAN

     「Vine Linux 2.6 r4」を使っています. 「ワークステーション」でインストールしました.  FORTRANで開発をたくて下記のサイトを参考にし「gcc-g77」をインストールしました. しかし,以下のようなエラーが出てしまいます. 何が原因で,どうのように解決すればいいのでしょうか? /usr/bin/ld:program_name.f90:file format not recognized; treating as linker script /usr/bin/ld:program_name.f90l:1:parse error collect2:ld returned lexit status ・参考にしたサイト 初歩的なFORTRANコンパイラ導入ガイド http://www-kn.sp.u-tokai.ac.jp/~inoue/computor/fortran/fortran.html PCの知識レベルとしては「初級シスアド」の資格を持っている程度です. よろしくお願いします.

  • C++からfortran77を呼び出す

    はじめまして。質問させて下さい。 私はfortran77で書かれたパッケージで使用されてる関数を、C++から呼び出して使えるコードを書いています。 けど、コンパイルがうまく通りません。 f77 -c -o main.o main.f f77 -c -o sub.o sub.f g++ -c Jikkou.cxx g++ main.o sub.o Jikkou.o -lg2c するとここで、以下のようなエラーを吐いちゃいます。 main.o: In function `main_': main.f:(.text+0x12c): undefined reference to `ran_' main.fとsub.fは、fortran77で書かれてるmainプログラムとサブルーチンです。 main.fの中で、乱数を出す為にRAN()を使ってるんですが、g++はこの関数が分からないようです。 どうにかg++にRAN()を分からせるいい方法はありませんか?

  • fortran 初心者です。

    fortranでフィボナッチ数列 A0 = 0 , A1 = 1 , Ai+1 = Ai + Ai-1 (i =2,3...) を計算するプログラムを作っています。 得られた値が奇数の時には、数値の右横に*をつけ、奇数かつ3の倍数なら**をつけます。 が、以下のようにプログラムしましたが、*印がつきません。どこが、間違っているのか、アドバイスよろしくお願いします。 C Question A0 = 0.0 A1 = 1.0 A2 = 1.0 WRITE(6,*)'A0 = 0.0' WRITE(6,*)'A1 = 1.0' DO 10 I = 2,10,1 A2 = A1 + A0 N = A2-(A2/2)*2 M = A2-(A2/3)*3 IF ( M .NE. 0 .AND. N .NE.0) THEN WRITE(6,*)'A',I,'=' ,A2,'*' ELSE IF ( M .NE. 0.AND. N .EQ.0)THEN WRITE(6,*)'A',I,'=' ,A2,'**' ELSE WRITE(6,*) 'A',I,'=' ,A2 END IF A0 = A1 A1 = A2 10 CONTINUE STOP END

  • いまFortranでプログラミングを勉強しています.g95というフリー

    いまFortranでプログラミングを勉強しています.g95というフリーソフトを使っているのですが,「ld:cannot open output file a.exe:permission denied」というようなエラーが出ます. でも,ソースファイルを別のディレクトリに移すとエラーは出なくなりました.また,再起動するとエラーが出ていたディレクトリでも実行ができました.どういうことなのでしょうか?

  • fortran エラーについて

    fortranで、副プログラムを使ってデータを昇順または降順に並べ替えるプログラムを入力して実行しようとしたところ、 ・Unexpected junk in formal argument list at (1) ・Two main PROGRAMs at (1) and (2) という2つのエラーが出ました。 これらの改善方法を教えて頂きたいです。 初心者ですので簡単なところで間違えている可能性もありますが、ご指摘いただければ幸いです。 以下、実際に入力したプログラムです。 ------------------------------ implicit none integer::i,n real::x(1000),a(1000),b(1000) n=1000 open(10,file='input-data-1.txt') do i=1,n read(10,*) x(i) end do close(10) open(10,file='output-data-1.txt') do i=1,n call koukan(i,x(i),a(i),b(i)) write(10,'(i4,2f10.3)') i,a(i),b(i) end do close(10) stop end subroutine koukan(i,x(i),shoujun,koujun) implicit none integer::i,n,made real::x(1000),w,shoujun,koujun do made=n-1,1,-1 do i=1,made if(x(i)>x(i+1)) then w=x(i) x(i)=x(i+1) x(i+1)=w end if end do end do shoujun=x(i) do made=n-1,1,-1 do i=1,made if(x(i)<x(i+1)) then w=x(i) x(i)=x(i+1) x(i+1)=w end if end do end do koujun=x(i) return end ------------------------------

  • 最新のgfortranでのコンパイルエラー

    GNU Fortran (Rev1, Built by MSYS2 project) 9.3.0ですが、現時点での最新バージョンと思われます。以下のソースファイルをコンパイルしてみました。 module abc real x,y end module abc program test use abc x=3.14 y=5.55 print *, x,y call xxx print *, x,y end program test subroutine xxx use abc x=5.55 y=3.14 end subroutine xxx その結果、 f951.exe: Fatal Error: Reading module 'abc' at line 1 column 46: Unexpected EOF というエラーになります。 10年以上前のintel fortranだと問題なくコンパイルでき結果もOKです。 できれば新しいコンパイラを使いたいのですが、ソースをどのように改変していけばいいでしょうか。また、最新版のコンパイラをやめた方がいいのでしょうか。コンパイラを新しくして他にもトラブルが出ているのですが。 Cのカテゴリですみません。ここしか思い当たらないので。

  • intel fortran cimpilerでプログラムファイルがコンパイルできない

    こんにちは。 当方プログラムに関しては全くの初心者です。 研究で早急に計算プログラムを使用したく、 現在intel fortran cimpiler8.0を使い、とあるソースファイルをコンパイルしたいのですがうまくいきません。 コンパイルの手順としてあっているのか自信がないのですが、 とりあえずやってみて、以下のようにエラーが出ます。 $ source /opt/intel_fc_80/bin/ifortvars.csh bash: /opt/intel_fc_80/bin/ifortvars.csh: line 28: syntax error: unexpected end of file $ ifort /home/ディレクトリのパス/ファイル名.f90 ifort: error: could not find directory in which g++ resides これはどういうことなのでしょうか?? どなたかご教授お願いいたします。 ちなみに、使用しているOSはlinuxのFedora.core1です。

専門家に質問してみよう