• ベストアンサー

フォートラン

プログラムを走らせていると、icは0から1ずつ増えていきます。 吐き出されるデータは 『aji.0998』 『aji.0999』 と出てきますが・・・icが1000になると、 『aji.010・』となっていまいます。 なぜでしょうか?原因わからず困っています。 (以下、原因があると考えられるプログラムです。) ic=0 isen=ic/1000 ihun=(ic-1000*isen)/100 iten=(ic-100*ihun)/10 ione=mod(ic,10) ofile='aji.'//char(48+isen)//char(48+ihun)//char(48+iten)//char(48+ione) write(6,*) ic,ofile open(15,status='unknown',file=ofile)

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

  • ベストアンサー
  • ultraCS
  • ベストアンサー率44% (3956/8947)
回答No.2

1000でうまくいかない理由は#1ご指摘の通り、itenが100になっているからです。 何が起こったかについて、若干の想像をふくみます itenが100の場合、char(48+iten)はchar(148)になります、で、148は94Hで、これは、JISの制御文字Cancel Characterになります。 実際にどういう実装がされたかわかりませんが、動作としては、文字列中に制御文字があったため、ofileの文字列を生成する際にそれが誤動作したものと思われます。ですから、 '1'を追加 aji.1→ '0'を追加 aji.10→ ここでCancel Characterが入って、キャリッジが先頭に→ '0'を先頭に追加 aji.010 この段階で、ajiの最後は不定(多分NULL)なので、表示不能文字の変換である・(ナカグロ)になったのではないかと まあ、 ihun=mod(10,(ic/100)) iten=mod(10,(ic/10)) にすれば解決する話ですが あるいは write(otfile,'(i8)') ic+10000 ofile(1:4)='aji.' なんてのでもいいかと

BOY12345
質問者

お礼

ありがとうございます。 『aji.1000』まで正常にプログラムが走りました!! 感謝、感謝です☆☆

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

ic が 1000 になると isen = 1, ihun = 0 だよなぁ. で, このとき iten の値が変になる, と. でも普通は「aji.10」で始まるはずだよなぁ.... 「aji.010」とかくるのは, やっぱり変だ.

BOY12345
質問者

お礼

ですよねぇ~、大変苦労しました。 あまり知識がなく、どうしていいかネットで調べていたら・・ このサイトを見つけて・・ そして、思わず投稿・・ そしたら、ultraCSが即時対応してくれ・・ Tacosanさんも紳士に考えてくれて・・ 本当、ありがとうございます。

すると、全ての回答が全文表示されます。

関連するQ&A