2

プログラムは非常に愚かですが、Fortranでファイルからの読み取りがどのように機能するかを理解するための単なるテストです。私は次の例を書きました:

program manipolazione
implicit none 
integer, parameter :: codice = 10
integer, parameter :: massimo = 20
integer :: numero, quadrato
integer :: error, errore_lettura
integer :: indice

010 format (1x, 'Il quadrato di ', I0, 1x, 'e'' ', I0)   
020 format(1x, A) ! scrive generico messaggio
030 format(1x, A, 1x, I0) ! scrive errori con loro codice
open (unit = codice, File = "test.txt", iostat = error, status = 'replace', action = 'write')
controllo_apertura : if (error == 0) then 
    write(*, 020) "Comincio a scrivere sul file...\n"
    contatore : do indice = 1, massimo, 1
        numero = indice
        quadrato = numero ** 2
        write(codice, 010) numero, quadrato
    end do contatore
else controllo_apertura
    write(*,020) "Non siamo riusciti ad aprire il file..."
end if controllo_apertura
close(codice)

open (unit = codice, File = "test.txt", iostat = error, status = 'old', action = 'read')
controllo_apertura1 : if (error == 0) then
    write(*,020)"Comincia la lettura dei valori!\n"
    counter : do indice = 1, massimo, 1
        read(codice, 010, iostat=errore_lettura) numero, quadrato ! THAT'S THE PROBLEM
        errorelettura : if (errore_lettura > 0) then 
            write(*,030) "Abbiamo avuto un problema serio, ho letto male, error:",errore_lettura
        else errorelettura
            write(*, 010) numero, quadrato
        end if errorelettura
    end do counter
else controllo_apertura1
    write(*,020) "Non siamo riusciti ad aprire il file..."
end if controllo_apertura1
read(*,*)
end program manipolazione

今書いたものを読んで、印刷して戻したいと思います。簡単に言うと、特定の形式で記述してから、それらの値を読み取ります。コードを読むことで、確実に理解できます。29行目でどうしたらいいのか本当にわかりません。

4

1 に答える 1

1

このフォーマットステートメントを使用しているようです

010 format (1x, 'Il quadrato di ', I0, 1x, 'e'' ', I0) 

この書き込みステートメントで

read(codice, 010, iostat=errore_lettura) numero, quadrato ! THAT'S THE PROBLEM

この問題は、文字列編集記述子を含むフォーマット ステートメントを使用しようとした場合に発生します。最新の標準では、これらは入力には有効ではないことに注意してください。以前の基準もそれらを除外したと思います。書き込み時には完全に理にかなっていますが、読み取りステートメントでそれらをどのように解釈したいかを理解するのは困難です。やってみます

011 format (2I0)
...
read(codice, 011, iostat=errore_lettura) numero, quadrato 

そして何が起こるか見てください

于 2013-01-15T11:31:02.120 に答える