24小时热门版块排行榜    

查看: 1109  |  回复: 7

astringent

铜虫 (著名写手)

[交流] 【求助】请教编译过程中的两个问题【已完结】 已有3人参与

我在编译的时候遇到下面几个问题,请大家帮忙看看
(1)我在程序中写的是
do i=1,n
if (条件1) then
-----
elseif (条件2) then
------
elseif (条件3) then
------
endif
if(条件4)A=1
enddo
但在编译时出现下面的错误:
endif
              1
Error: Expecting END DO statement at (1)
这是为什么呢?

(2)我在调用子程序test(nattot)时,遇到下面的错误
double precision :: xxx(nattot),yyy(nattot),zzz(nattot)
                              1
Error: Variable 'nattot' cannot appear in the expression at (1)
我在子程序test中,只声明了nattot是整型并没有赋值,但是在主程序中我声明nattot是整型,并且赋值了interger::nattot=10.难道需要将nattot用parameter定义?

[ Last edited by nono2009 on 2010-11-17 at 09:52 ]
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
nono2009(金币+1):鼓励应助 2010-11-17 09:52:14
第一个问题,你前面有 do,后面要用 enddo

第二个问题,nattot 必须是一个已知的常量,似乎必须用 parameter 来定义……
2楼2010-11-13 11:23:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ykwang

金虫 (正式写手)


小木虫(金币+0.5):给个红包,谢谢回帖交流
第一个问题出在if(条件4)A=1上,该语句在FORTRAN77中是允许的,但在新版FORTRAN90以上不推荐使用。这一差别导致有些编译器可以通过,有些则报错。楼主将其改为
IF(条件4)THEN
  A=1
ENDIF
试一试。

第二个问题见楼上的回答。
Nothing_Is_Impossible!
3楼2010-11-13 12:19:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

astringent

铜虫 (著名写手)

再问一下,我看别人的程序时,他在主程序中写的是double precision cell(3),并从另一个文件中读入cell的值-1,然后调用了子程序test(cell)并在子程序中定义double precision cell(*),我想问一下,子程序中cell后面括号的*是什么意思呢?如果写成cell(3)能表达同样的意思吗?
4楼2010-11-13 18:09:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ykwang

金虫 (正式写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
nono2009(金币+2):鼓励应助 2010-11-17 09:52:07
引用回帖:
Originally posted by astringent at 2010-11-13 18:09:58:
再问一下,我看别人的程序时,他在主程序中写的是double precision cell(3),并从另一个文件中读入cell的值-1,然后调用了子程序test(cell)并在子程序中定义double precision cell(*),我想问一下,子程序中 ...

主程序中用double precision cell(3)定义CELL是对的,因为3为常数。在子程序中定义double precision cell(*)也是对的,其中*号表示缺省大小,即主程序中定义CELL是多大,这里就按多大处理。
Nothing_Is_Impossible!
5楼2010-11-13 18:51:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

astringent

铜虫 (著名写手)

引用回帖:
Originally posted by ykwang at 2010-11-13 18:51:08:


主程序中用double precision cell(3)定义CELL是对的,因为3为常数。在子程序中定义double precision cell(*)也是对的,其中*号表示缺省大小,即主程序中定义CELL是多大,这里就按多大处理。

那我在子程序中直接写成double precision cell(3)行不?如果这样写是否和double precision cell(*)得到相同的结果?
6楼2010-11-14 01:28:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ykwang

金虫 (正式写手)

引用回帖:
Originally posted by astringent at 2010-11-14 01:28:50:


那我在子程序中直接写成double precision cell(3)行不?如果这样写是否和double precision cell(*)得到相同的结果?

YES!
Nothing_Is_Impossible!
7楼2010-11-14 02:17:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

astringent

铜虫 (著名写手)

多谢解答!
8楼2010-11-14 05:26:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 astringent 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见