回 帖 发 新 帖 刷新版面

主题:Visual Fortran中如何直接读取键盘

在编译,执行程序时,会发现,当程序执行后,屏幕会显示"Press any key to contine". 随便按一个键,程序退出.这里,就有个直接读取键盘的问题.我想请教在Visual Fortran中,如何实现"Press any key to contine"这样的功能? 谢谢.
   在<计算机时代>1994年第4期上,有一篇文章,介绍了一个方法.其直接读取键盘的子程序为:

      SUBROUTINE SUB_inkey(char1,char2)
       implicit none
       character*1 char1,char2
       open(1,File='CON', Form='BINARY')
         read(1) char1
         if(ichar(char1) .eq. 0) then
           read(1) char2
         endif
       close(1)
    END      


其程序是在Fortran3.3上编译通过的.我在Visual Fortran6.6上试了一下.发现不能实现"Press any key to contine"的功能.所以请大家想想办法,如何实现.

回复列表 (共7个回复)

沙发

PAUSE

板凳

谢谢您的回复.对于pause函数来说,它需要按enter键,而不是任意键.此外,直接读取键盘的子程序,还可以实现密码等功能.期待您继续关注.

3 楼


谁说cvf6.6不能实现"Press any key to contine"的功能?难道是设置的问题?

4 楼

intel fortran 11

program readchar
use ifcore
implicit none
character(1) r
r=getcharqq()
write(*,*)r
end

5 楼

感谢大家的关注及热心的帮助.在web81先生/女士写的程序的启发下,将前人的程序改写如下,在CVF下编译通过.
program main
      character*1 char1,char2
      call SUB_inkey(char1,char2)
       write(*,*) char1,' ',char2,' ',ichar(char1),ichar(char2)
      
    END

c     ------------------------------------------------      
      SUBROUTINE SUB_inkey(char1,char2)
       USE DFLIB
       implicit none
       character*1 char1,char2
       char1=getcharqq()
       IF(ichar(char1) .eq. 224) char2=getcharqq()
    END
众人拾柴火焰高.再次感谢大家的热情帮助.

6 楼


依然是有些功能键不能获取,不甚明白你设两个字符的意思,这样不行么?
program main
  USE DFLIB
  character(len=1)::a
  a=getcharqq()
  write(*,*) a
end program

7 楼

关于楼上的疑问解释如下:
    我用的是CVF6.6版本.当按下的字符的编码(十进制)大于224时,char1得到的结果是相同的.查找getcharqq函数的说明文档可知,此时需要再次调用getcharqq函数,得到char2的值.这样,利用char1和char2两个变量,就可以确定按下的哪一个键了.

我来回复

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