Проблема в том, что Fortran является системой ввода-вывода на основе записей, а C - потоковой.
Если у вас есть доступ к компилятору, совместимому с Fortran 2003 (современные версии gfortran должны работать), вы можете использовать спецификатор stream
ACCESS
, чтобы делать то, что вы хотите.
Пример можно найти здесь .
Конечно, если вы действительно склонны, вы можете просто использовать свою функцию C непосредственно из Fortran.Взаимодействие двух языков, как правило, простое, обычно требуется только оболочка с именем в нижнем регистре и дополнительным подчеркиванием (конечно, в зависимости от компилятора и платформы).Передача массивов или строк назад и вперед обычно не так тривиальна;но для этого примера это не понадобится.
Когда данные находятся в массиве символов, вы можете прочитать их в другую переменную, как вы делаете с подписью ADVANCE=no
, т.е.
do i = 1, numberIWant
read(tline, '(F10.15)', ADVANCE="no") tline1
end do
, где tline
должен содержать ваш номер в конце цикла.
Из-за ввода-вывода на основе записей оператор READ
обычно выбрасывает то, что находится после конца записи.Но ADVANCE=no
говорит, что нет.