如何解决如何在Fortran中设置小代码复活节彩蛋-随机选择错误消息的引号
我创建了一个程序,该程序具有一个用户界面,可以从菜单中选择一个选项。该选项被提供给if语句,该语句将其重定向到正确的子例程。如果出现选项错误的情况,我还设置了一条小错误消息。
else
write(*,*)''
write(*,*)'I am sorry,Dave. I am afraid I cannot do that!'
write(*,*)' Press enter to return to main menu! '
read(*,*)
goto 300
end if
一切正常。事实是-HAL9000具有如此多的标志性短语,它们与错误消息一样严重,以至于我想改进此if block
并可能为用户提供从一组预定义短语中随机选择的短语。这些短语的示例:
'This mission is too important for me to allow you to jeopardize it.'
'I know I've made some very poor decisions recently,but I can give you my complete assurance that my work will be back to normal.'
'I've still got the greatest enthusiasm and confidence in the mission. And I want to help you.'
'Just what do you think you're doing,Dave?'
'Look Dave,I can see you're really upset about this.'
'I honestly think you ought to sit down calmly,take a stress pill,and think things over.'
嗯,起初我以为这很容易:只需构建一个字符数组,弹出其中的短语,然后执行以下操作即可:
program pick_random
implicit none
integer :: i
integer :: a(10) = (/ (i,i = 1,10) /)
real :: r
call random_seed
call random_number(r)
write(*,*) a(int(r*size(a)) + 1)
end program
但是显然,这不是Fortran的工作方式,而且字符数组显然具有我希望的very different meaning!
有关如何实施的任何建议?
解决方法
在@High Performance Mark关于源代码缺失概念的宝贵评论之后,我设法创建了代码-效果很好!为了将来参考,我将其发布在这里!
complex.h
跟进::按照@francescalus的建议,我尝试按如下方式重写字符数组
subroutine easter_eggs()
implicit none
character(len=100),dimension(8) :: easter_egg
integer :: i
real :: r
easter_egg=(/&
&'Are you from the future? Because I have not written such option yet! Wierd...! ',&
&'Mistakes allow thinking to happen! ',&
&'Let me state the obvious: Are you sure you type the keyword correctly? ',&
&'There are no easter eggs in this program. Yep! That is right! None! And you there is no such option!',&
&'You have learned so much from your mistakes that you decided to make a few more,right? ',&
&'Just what do you think you are doing,Dave? ',&
&'I see you never do the same mistake twice - you like to do it often just to be sure! ',&
&'Anyone who has never made a mistake has never tried anything new! (Albert Einstein) '/)
call random_seed
call random_number(r)
write(*,*)easter_egg(int(r*size(easter_egg))+1)
end subroutine easter_eggs
它可以很好地编译,但是每次我输入错误的关键字时,只会弹出一个短语-对应于字符数组中设置的第一个短语!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。