回 帖 发 新 帖 刷新版面

主题:[讨论]【求助】单链表的问题

    program experiment

    implicit none
    
    type link
        character ::c
        type(link),pointer::next
    end type link
    type(link),pointer::root,current
    
    integer::io_stat_number=0
    
        allocate(root)
        read(*,'(A)',advance='no',iostat=io_stat_number)root%c
        if(io_stat_number==-1)then
            nullify(root%next)
        else
            allocate(root%next)
        endif

        current=>root
        do while(associated(current%next))
            current=>current%next
            read(*,'(A)',advance='no',iostat=io_stat_number)current%c
            if(io_stat_number==-1)then
                nullify(current%next)
            else
                allocate(current%next)
            endif
        end do

        current=>root
        [color=FF0000]do while(associated(current%next))[/color]                
            print *,current%c
            current=>current%next
        end do 
    end program experiment
    
    
    
    以上是代码  
    
    我的问题是红字处 的意思是不是说如果current%next没有关联循环就不执行
    可是最后一个(我理解是最后一个current%next应该是没关联的吧)current%c为什么还能被print呢

回复列表 (共5个回复)

沙发

老天保佑今天一定有人回啊,请善待一个明天就要考试的人吧~~

板凳

root%c 有吧?
root%next =>   第二个

第二个%c
第二个%next => 第三个

第三个%c
第三个%next => 第四个

...

最后一个%c
最后一个%next => 空

最后一次循环 current 就是最后一次
do while(associated(current%next))     !// 如果 最后一个%next 指向空           
            print *,current%c    !// 输出 最后一个%c
            current=>current%next
        end do 

这时候 current%c 也就是 最后一个%c,他是存在的。只是最后一个%next 不存在

3 楼


如果最后^%next指向空,那associated(^%next)就是.false.那么do循环不就该不执行么

4 楼

最后一个在输入时就是终止符,也就是 iostat == -1 的那个字符。

比如输入 abcdef?

输出 abcdef

最后那个字符本来就不能显示的。

5 楼


哦~~这样子啊,明白了~~
牛人~~非常非常感谢~~

我来回复

您尚未登录,请登录后再回复。点此登录或注册