Ошибка при чтении в float в Fortran - PullRequest
2 голосов
/ 12 декабря 2011

Это должно быть довольно просто, но мне не удается прочитать число с плавающей запятой в Фортране. Моя программа test.f выглядит так:

  PROGRAM TEST
  open(UNIT=1,FILE='test.inp')
  read(1,'(f3.0)')line

  STOP
  END

Входной файл test.inp просто содержит один float: 1.2

Теперь компиляция моего тестового файла проходит нормально, но когда я запускаю его, я получаю сообщение об ошибке:

В строке 4 файла test.f (unit = 1, file = 'test.inp')

Ошибка времени исполнения на Фортране: Ожидается REAL для элемента 1 при форматированной передаче, получено INTEGER

(f3.0)

^

Я пробовал разные модификации кода, а также гуглил сообщение об ошибке, но безрезультатно. Любая помощь будет принята с благодарностью!

С уважением, Frank

Ответы [ 3 ]

5 голосов
/ 12 декабря 2011

Ваша переменная line неявно определяется как целое число. Это не работает с дескриптором редактирования f. Если вы хотите прочитать целое число, используйте i дескриптор редактирования (например, i3). В противном случае объявите line как вещественное для математики дескриптора "f".

Примечание рядом: .0 не проблема, потому что, если Фортран получает число с десятичной точкой, часть .0 в дескрипторе игнорируется. Он используется только при вводе числа без десятичной дроби, а затем использует число за десятичной точкой в ​​дескрипторе, чтобы добавить десятичную точку в нужное место. Для F8.5, 123456789 читается как 123.45678. Подробнее об этом здесь http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/fortran/lin/compiler_f/lref_for/source_files/pghredf.htm.

1 голос
/ 12 декабря 2011

Я бы посоветовал прочитать / записать данные в формате списка, если у вас нет веских причин поступить иначе. Предполагая, что вы читаете из файла только с одним float или целым числом в одной строке, как это

123.45
11
42

тогда это должно сделать чтение

real*8 :: x,y,z
open(1,file=filename)
read(1,*)x
read(1,*)y
read(1,*)z
close(1)
1 голос
/ 12 декабря 2011

В вашем операторе чтения

read(1,'(f3.0)')line

f3.0 указывает программе тура читать 3 цифры с 0 цифрами после десятичной дроби (это означает синтаксис nm).Поэтому я предполагаю, что программа просто читает 1 из файла (не 1.2), что является целым числом.Попробуйте заменить эту строку чем-то вроде

read(1,'(f3.1)')line

, хотя, если число в вашем файле может измениться и быть больше 9,9 или иметь более одного десятичного знака, вы должны увеличить ширину поля до значения, большего чем3.

См. Документацию read встроенного и дескрипторов редактирования данных для получения дополнительной информации о чтении и записи на Фортране.

Редактировать : спецификатор формата, второй аргумент в кавычках в вашей прочитанной статистике, имеет форму fw.d, где f указывает, что данные для чтения являются числом с плавающей запятой, w являетсяширина поля, включая все пробелы и десятичные точки, а d указывает количество цифр справа от десятичной точки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...