- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我习惯了 Fortran,其中我使用名称列表顺序读入从文件中获取变量。这让我有一个看起来像这样的文件
&inputDataList
n = 1000.0 ! This is the first variable
m = 1e3 ! Second
l = -2 ! Last variable
/
在这里我可以用它的名字命名变量并分配一个值以及之后的注释来说明变量的实际含义。加载非常容易完成
namelist /inputDataList/ n, m, l
open( 100, file = 'input.txt' )
read( unit = 100, nml = inputDataList )
close( 100 )
现在我的问题是,C 中有类似的东西吗?还是我必须通过在“=”等处截断字符串来手动执行此操作?
最佳答案
这是一个简单的示例,可以让您从 C 中读取 Fortran 名单。我使用了您在问题中提供的名单文件 input.txt
。
Fortran 子程序nmlread_f.f90
(注意ISO_C_BINDING
的使用):
subroutine namelistRead(n,m,l) bind(c,name='namelistRead')
use,intrinsic :: iso_c_binding,only:c_float,c_int
implicit none
real(kind=c_float), intent(inout) :: n
real(kind=c_float), intent(inout) :: m
integer(kind=c_int),intent(inout) :: l
namelist /inputDataList/ n,m,l
open(unit=100,file='input.txt',status='old')
read(unit=100,nml=inputDataList)
close(unit=100)
write(*,*)'Fortran procedure has n,m,l:',n,m,l
endsubroutine namelistRead
C 程序,nmlread_c.c
:
#include <stdio.h>
void namelistRead(float *n, float *m, int *l);
int main()
{
float n;
float m;
int l;
n = 0;
m = 0;
l = 0;
printf("%5.1f %5.1f %3d\n",n,m,l);
namelistRead(&n,&m,&l);
printf("%5.1f %5.1f %3d\n",n,m,l);
}
另请注意,n
、m
和 l
需要声明为指针,以便通过引用将它们传递给 Fortran 例程。
在我的系统上,我使用 Intel 编译器套件编译它(我的 gcc 和 gfortran 已经有好几年了,别问了):
ifort -c nmlread_f.f90
icc -c nmlread_c.c
icc nmlread_c.o nmlread_f.o /usr/local/intel/composerxe-2011.2.137/compiler/lib/intel64/libifcore.a
执行 a.out
产生预期的输出:
0.0 0.0 0
Fortran procedure has n,m,l: 1000.000 1000.000 -2
1000.0 1000.0 -2
您可以编辑上述 Fortran 过程,使其更通用,例如从 C 程序指定名单文件名和列表名。
关于C 相当于 Fortran 名单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17581416/
我正在努力实现下一个目标: 家长: public class Animal { private List relatives; public List getRelatives() {
是否可以创建一个包含不同类型委托(delegate)的列表?例如考虑这两个委托(delegate): class MyEventArg1 : EventArgs {} class MyEventArg
我的问题几乎与 C equivalent to Fortran namelist 相同 关键区别在于我使用的是 C++/17,想知道是否有更符合 C++ 习惯的方式来解决这个问题。 最佳答案 没有相当
我正在使用具有固定线程池大小的全局执行程序服务。我们有一堆相关任务提交执行并等待 future 列表。 最近,我们遇到了 CPU 利用率高的问题,在调试时我发现对 future 列表中的一项调用 ge
我习惯了 Fortran,其中我使用名称列表顺序读入从文件中获取变量。这让我有一个看起来像这样的文件 &inputDataList n = 1000.0 ! This is the first var
为什么TimePicker在 knockout 名单之外工作得很好,但在他身上就不行了。如何在 knockout 中启动? @{ ViewBag.Title = "Index"; } Index
我正在阅读 https://www.nba.com/history/awards/mvp .我尝试按降序打印出名称和计数。 Kareem Abdul-Jabbar: 6 Bill Russell: 5
我想知道如何在 Python 中轻松地从 Fortran 名单文件读取和写入值。 最佳答案 有一个模块叫做f90nml读取/写入 Fortran 名称列表。使用此模块,您可以将名单读入嵌套的 Pyth
我是一名优秀的程序员,十分优秀!