Fortran Coder

标题: 关于循环中cycle的一个发现 [打印本页]

作者: 蒂姆邓肯    时间: 2015-12-23 23:11
标题: 关于循环中cycle的一个发现
本帖最后由 蒂姆邓肯 于 2015-12-23 23:19 编辑

如题,希望对大家有帮助,以及希望各位前辈能够指点迷津在使用中发现cycle和if(...)的结合有问题,正常的代码如下:
[Fortran] 纯文本查看 复制代码
program aa
implicit none

integer j(3)
integer i

data j /22,33,44/
do i=1,3
    if(j(i).eq.22) cycle
    write(*,*)j(i)
enddo
   
end

这里能正常输出j(i)的值,但是如果将if的写法写成
[Fortran] 纯文本查看 复制代码
do i=1,3    
if(j(i).eq.22) then
        cycle
        write(*,*)j(i)
    endif   
enddo


则什么结果都没有,数组的数据也丢失了

根据彭国伦的书上第73页的描述,if(...) command的写法只能在模块中只含有一个程序命令时使用,由此是否可以推断cycle这个模块有且仅有一个命令,就是cycle本身?
请各位多多指教






作者: 百事可乐    时间: 2015-12-23 23:25
第一次,满足 if , cycle 进入下一次循环,不输出。
第二次,不满足 if,不输出。
第三次,不满足 if , 不输出。

改为
[Fortran] 纯文本查看 复制代码
do i=1,3    
if(j(i).eq.22) then
        cycle
    endif   
    write(*,*)j(i)
enddo


就与 之前的一样效果了
作者: 百事可乐    时间: 2015-12-23 23:26
cycle 是一个语句,既非模块,也非命令。要把基本概念弄清楚 。

作者: 蒂姆邓肯    时间: 2015-12-24 13:59
百事可乐 发表于 2015-12-23 23:25
第一次,满足 if , cycle 进入下一次循环,不输出。
第二次,不满足 if,不输出。
第三次,不满足 if , 不 ...

啊!对的!我把write写在if判断里了,所以cycle的时候给忽略了,难怪昨天我跑的时候一直感觉好奇怪的,谢谢你的指教,昨晚脑袋浆糊了,这么简单的逻辑都没搞清,现在理清了




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2