蒂姆邓肯 发表于 2015-12-23 23:11:20

关于循环中cycle的一个发现

本帖最后由 蒂姆邓肯 于 2015-12-23 23:19 编辑

如题,希望对大家有帮助,以及希望各位前辈能够指点迷津在使用中发现cycle和if(...)的结合有问题,正常的代码如下: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的写法写成
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:19

第一次,满足 if , cycle 进入下一次循环,不输出。
第二次,不满足 if,不输出。
第三次,不满足 if , 不输出。

改为
do i=1,3   
if(j(i).eq.22) then
      cycle
    endif   
    write(*,*)j(i)
enddo


就与 之前的一样效果了

百事可乐 发表于 2015-12-23 23:26:52

cycle 是一个语句,既非模块,也非命令。要把基本概念弄清楚 。

蒂姆邓肯 发表于 2015-12-24 13:59:06

百事可乐 发表于 2015-12-23 23:25
第一次,满足 if , cycle 进入下一次循环,不输出。
第二次,不满足 if,不输出。
第三次,不满足 if , 不 ...

啊!对的!我把write写在if判断里了,所以cycle的时候给忽略了,难怪昨天我跑的时候一直感觉好奇怪的,谢谢你的指教,昨晚脑袋浆糊了,这么简单的逻辑都没搞清,现在理清了:-P
页: [1]
查看完整版本: 关于循环中cycle的一个发现