2013-08-23 4 views
8

In Fortran, ogni volta che si utilizza WRITE viene prodotta una nuova riga. Per controllare il funzionamento di un programma che si sta eseguendo, vorrei scrivere sullo schermo il valore corrente di una variabile, ma sempre sulla stessa riga (cancellando il valore precedente e iniziando dall'inizio della riga). Cioè, qualcosa comeScrittura sulla stessa riga in FORTRAN

1 CONTINUE 
     "update the value of a" 
     WRITE(*,*) a 
     BACKSPACE "screen" 
     GOTO 1 

Qualcosa di simile WRITE(*,*,ADVANCE='NO') (non corretta in ogni caso) non è proprio quello che bisogno: questo sarebbe scrivere tutti i valori di a uno dopo l'altro su una linea molto lunga .

+0

Abbastanza sicuro che 'BACKSPACE' fa ** non ** fa quello che sembri pensare di fare. –

risposta

7

un trucco che mi è stato mostrato per ciò che si vuole è la seguente

do l=1,lmax 
    ...update a... 
    write(*,'(1a1,<type>,$)') char(13), a 
enddo 

dove <type> è il vostro identificatore di formato per a (vale a dire, i0 per intero).

La chiave è char(13), che è il ritorno a capo e $ nel descrittore di formato. Non so davvero se c'è un nome per $, so solo che funziona per la visualizzazione sullo schermo - per l'output in file si ottiene un a su ogni riga.

+0

Nota il descrittore $ non è nella lingua standard. – IanH

+0

Supponevo che non fosse standard, ma funziona per me con ifort 11+ e gfortran 4.6 e 4.7. –

+0

advance = no è la sostituzione "standard" per $. Anche la soluzione dipende dal tipo di terminale, se questa risposta non funziona torna indietro e dicci quale terminale stai correndo, – agentp