2013-08-23 4 views
8

В Фортране каждый раз, когда используется WRITE, создается новая линия. Чтобы контролировать работу выполняемой программы, я хотел бы написать на экране текущее значение переменной, но всегда на одной строке (стирание предыдущего значения и начало в начале строки). То есть, что-то вродеЗапись в той же строке в FORTRAN

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

Что-то вроде WRITE(*,*,ADVANCE='NO') (неправильно так или иначе) не совсем то, что я потребность: это будет писать все значения a один за другим на очень длинной линии.

+0

Довольно уверен, что 'BACKSPACE' делает ** не ** делает то, что вы, кажется, думаете. –

ответ

7

Уловка, что мне было показано, что вы хотите как следует

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

<type>, где ваш спецификатор формата для a (т.е. i0 для целого числа).

Ключ char(13), который является возвратом каретки, и $ в дескрипторе формата. Я действительно не знаю, есть ли имя для $, я просто знаю, что он работает для отображения на экране - для вывода в файл вы получаете a на каждой строке.

+0

Обратите внимание, что дескриптор $ не находится на стандартном языке. – IanH

+0

Я предположил, что это не стандарт, но он работает для меня с ifort 11+ и gfortran 4.6 и 4.7. –

+0

advance = no является «стандартной» заменой для $. Кроме того, решение зависит от типа вашего терминала, если этот ответ не работает, и сообщите нам, какой терминал вы используете, – agentp

Смежные вопросы