小编And*_*rew的帖子

在Fortran 90中,是否不可能在新变量的声明语句中引用先前声明的变量?

在Fortran中,变量的声明语句是否可以引用先前声明的变量?例如,当我尝试以下操作时:

PROGRAM test3
  IMPLICIT NONE

  INTEGER :: a=2286
  INTEGER :: b=a/3

  WRITE(*,*) a, b
END PROGRAM test3
Run Code Online (Sandbox Code Playgroud)

我收到编译时错误消息:

test3.f90:5.16:

  INTEGER :: b=a/3
                1
Error: Parameter 'a' at (1) has not been declared or is a variable, which
does not reduce to a constant expression
Run Code Online (Sandbox Code Playgroud)

另一方面,如果我在一个与b的声明分开的语句中将b分配给/ 2,它编译并运行正常:

PROGRAM test3
  IMPLICIT NONE

  INTEGER :: a=2286
  INTEGER :: b
  b=a/3

  WRITE(*,*) a, b
END PROGRAM test3
Run Code Online (Sandbox Code Playgroud)

这给了我正确的输出:

2286         762
Run Code Online (Sandbox Code Playgroud)

为什么会这样 - 先前声明的变量不能包含在新变量的声明语句中?难道我做错了什么?或者这只是"生活中的Fortran事实"?

非常感谢您的宝贵时间!

fortran declaration

4
推荐指数
2
解决办法
2945
查看次数

在 Fortran 中打开和写入语句

我正在阅读http://en.wikibooks.org/wiki/Fortran/Fortran_simple_input_and_output 上的 Fortran 教程。在下面的程序中,unit=out_unit 做什么?

program xproduct
  implicit none
  integer            :: i,j
  integer, parameter :: out_unit=20

  print*,"enter two integers"
  read (*,*) i,j

  open (unit=out_unit,file="results.txt",action="write",status="replace")
  write (out_unit,*) "The product of",i," and",j
  write (out_unit,*) "is",i*j

  close (out_unit)
end program xproduct
Run Code Online (Sandbox Code Playgroud)

当我运行这个程序时,文本文件 results.txt 包含以下文本:

 The product of           2  and           3
 is           6
Run Code Online (Sandbox Code Playgroud)

file-io fortran

3
推荐指数
1
解决办法
2354
查看次数

正确使用Fortran流来编写和读取整数数组

这与我最近关于Fortran流等的帖子有些相关:将存储在Fortran 90二进制文件中的数据转换为人类可读格式.

我试图将一个简单的整数数组写入一个文件,然后使用Fortran的READ函数然后读入我创建的二进制文件.我通过包含ACCESS="STREAM"在我的OPEN指令中使用流.我有以下代码:

MODULE streamtest2subs

  IMPLICIT NONE

CONTAINS

SUBROUTINE writeUstream(myarray)
  IMPLICIT NONE
  INTEGER, INTENT(IN), DIMENSION(4,10) :: myarray
  INTEGER :: myvalue = 12345, mypos
  OPEN(UNIT=11, FILE="ustream.demo", STATUS="REPLACE", ACCESS="STREAM")
  WRITE(11) myarray
  CLOSE(UNIT=11)
END SUBROUTINE writeUstream

SUBROUTINE readUstream
  IMPLICIT NONE
  INTEGER :: test1, test2, test3
  INTEGER :: n
  OPEN(UNIT=42, FILE="ustream.demo", STATUS="OLD", ACCESS="STREAM")
  READ(42, POS=1) test1
  READ(42, POS=2) test2
  READ(42, POS=3) test3

  WRITE(*,*) "This is the output:"
  WRITE(*,*) test1
  WRITE(*,*) test2
  WRITE(*,*) test3
END SUBROUTINE readUstream …
Run Code Online (Sandbox Code Playgroud)

arrays fortran stream

2
推荐指数
1
解决办法
4392
查看次数

在C中使用fopen命令的初学者很难

我正在关注C编程教程http://www.cprogramming.com/tutorial/c/lesson10.html.这个特殊的教程用C语言教文件I/O; 特别是,讨论了fopen命令.有一次,他们给出了以下示例(我认为应该打印文件test.txt的内容):

FILE *fp;
fp=fopen("c:\\test.txt", "w");
fprintf(fp, "Testing...\n");
Run Code Online (Sandbox Code Playgroud)

因此,我创建了一个名为test.txt的文本文件,并将其保存在我当前的工作目录中(C:\ cygwin\home\Andrew\cprogramming).然后我在同一目录中创建了ac文件,它包含以下代码:

#include <stdio.h>

int main()
{
  FILE *fp;
  fp=open("test.txt","w");
  fprintf(fp,"Testing...\n");
}
Run Code Online (Sandbox Code Playgroud)

当我使用gcc编译这个c文件(我称之为helloworld2.c)时,我收到以下消息:

helloworld2.c: In function `main':
helloworld2.c:40: warning: assignment makes pointer from integer without a cast
Run Code Online (Sandbox Code Playgroud)

然后,当我尝试运行可执行文件时,我得到:

Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)

你对我接下来应该尝试什么有什么想法吗?

非常感谢您的宝贵时间.

c fopen

0
推荐指数
1
解决办法
2367
查看次数

为什么这个Fortran随机数生成器会导致分段错误?

ran0从文本数字食谱中获取了以下功能.我写了自己的程序random2来打电话ran0.

为什么此代码会导致分段错误?谢谢你的时间.

FUNCTION ran0(idum)
  INTEGER idum,IA,IM,IQ,IR,MASK
  REAL ran0,AM
  PARAMETER (IA=16807,IM=2147483647,AM=1./IM,IQ=127773,IR=2836,MASK=123459876)
  INTEGER k
  idum=ieor(idum,MASK)
  k=idum/IQ
  idum=IA*(idum-k*IQ)-IR*k
  if (idum.lt.0) idum=idum+IM
  ran0=AM*idum
  idum=ieor(idum,MASK)
  return
END FUNCTION

PROGRAM random2
  IMPLICIT NONE
  REAL :: ran0
  PRINT *, ran0(6)
END PROGRAM
Run Code Online (Sandbox Code Playgroud)

fortran fortran90

0
推荐指数
1
解决办法
1237
查看次数

标签 统计

fortran ×4

arrays ×1

c ×1

declaration ×1

file-io ×1

fopen ×1

fortran90 ×1

stream ×1