Fortran 95 Do-While 循环在错误条件下不退出

标签 fortran while-loop exit do-while fortran95

这是我的代码:

program change 

            integer:: amount, remainder, q, d, n, p
            amount = 47
            remainder = amount
            print*,remainder
            q = 0
            d = 0
            n = 0
            p = 0

            do while (remainder >= 25)
                    remainder = remainder - 25
                    print*,remainder
                    q = q + 1       
            end do
            do while (remainder >= 10)
                    remainder = remainder - 25
                    print*,remainder
                    d = d + 1       
            end do
            do while (remainder >= 5)
                    remainder = remainder - 25
                    print*,remainder
                    n = n + 1       
            end do
            do while (remainder >= 1)
                    remainder = remainder - 25
                    print*,remainder
                    p = p + 1       
            end do 

            print*, "# Quarters:", q
            print*, "# Dimes:", d
            print*, "# Nickels:", n
            print*, "# Pennies:", p

    end program change

输出:

 47
      22
      -3
# Quarters:           1
# Dimes:           1
# Nickels:           0
# Pennies:           0

一旦余数变为 22,第一个循环 (>=25) 应退出,但它会再次运行并产生负数。即使条件为假,为什么它不退出?我正在使用 IDEone.com 的 Fortran“编译器”,它看起来与 Fortran 95 类似。

最佳答案

你的 DO 循环没问题。您只需在每个循环中从余数中减去正确的面额即可。例如,将第二个 DO 循环更改为:

        do while (remainder >= 10)
                remainder = remainder - 10
                print*,remainder
                d = d + 1       
        end do

并以类似的方式更改其余部分。

关于Fortran 95 Do-While 循环在错误条件下不退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5137092/

相关文章:

python - 如何在被 Python 杀死之前运行最后一个函数?

c - SigHandler 导致程序无法终止

python - 在 systemd 停止运行 python 服务之前做一些事情

list - 如何回答每行包含多个答案的交互式提示

pointers - Fortran 指针算术

c - 从 gfortran 将 mxgetfield 添加到 mexinterface

c - 在 C 中修改 Fortran 数组

java循环添加100的增量

php foreach 仅使用动态数据循环一次

java - 循环不执行多次