Fortran Coder

查看: 7641|回复: 3
打印 上一主题 下一主题

[流程控制] 关于循环中cycle的一个发现

[复制链接]

7

帖子

3

主题

0

精华

入门

F 币
46 元
贡献
24 点
跳转到指定楼层
楼主
发表于 2015-12-23 23:11:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 蒂姆邓肯 于 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本身?
请各位多多指教





分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

100

帖子

0

主题

0

精华

专家

F 币
550 元
贡献
291 点

规矩勋章元老勋章

QQ
沙发
发表于 2015-12-23 23:25:19 | 只看该作者
第一次,满足 if , cycle 进入下一次循环,不输出。
第二次,不满足 if,不输出。
第三次,不满足 if , 不输出。

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


就与 之前的一样效果了

100

帖子

0

主题

0

精华

专家

F 币
550 元
贡献
291 点

规矩勋章元老勋章

QQ
板凳
发表于 2015-12-23 23:26:52 | 只看该作者
cycle 是一个语句,既非模块,也非命令。要把基本概念弄清楚 。

7

帖子

3

主题

0

精华

入门

F 币
46 元
贡献
24 点
地板
 楼主| 发表于 2015-12-24 13:59:06 | 只看该作者
百事可乐 发表于 2015-12-23 23:25
第一次,满足 if , cycle 进入下一次循环,不输出。
第二次,不满足 if,不输出。
第三次,不满足 if , 不 ...

啊!对的!我把write写在if判断里了,所以cycle的时候给忽略了,难怪昨天我跑的时候一直感觉好奇怪的,谢谢你的指教,昨晚脑袋浆糊了,这么简单的逻辑都没搞清,现在理清了
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-26 09:31

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表