主题:Visual Fortran中如何直接读取键盘
mangreat
[专家分:0] 发布于 2010-09-25 11:34:00
在编译,执行程序时,会发现,当程序执行后,屏幕会显示"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个回复)
沙发
cgl_lgs [专家分:21040] 发布于 2010-09-25 11:56:00
PAUSE
板凳
mangreat [专家分:0] 发布于 2010-09-25 12:17:00
谢谢您的回复.对于pause函数来说,它需要按enter键,而不是任意键.此外,直接读取键盘的子程序,还可以实现密码等功能.期待您继续关注.
3 楼
jstzhurj [专家分:4680] 发布于 2010-09-25 12:23:00
谁说cvf6.6不能实现"Press any key to contine"的功能?难道是设置的问题?
4 楼
web81 [专家分:150] 发布于 2010-09-25 16:05:00
intel fortran 11
program readchar
use ifcore
implicit none
character(1) r
r=getcharqq()
write(*,*)r
end
5 楼
mangreat [专家分:0] 发布于 2010-09-27 08:03:00
感谢大家的关注及热心的帮助.在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 楼
jstzhurj [专家分:4680] 发布于 2010-09-27 08:51:00
依然是有些功能键不能获取,不甚明白你设两个字符的意思,这样不行么?
program main
USE DFLIB
character(len=1)::a
a=getcharqq()
write(*,*) a
end program
7 楼
mangreat [专家分:0] 发布于 2010-09-27 12:28:00
关于楼上的疑问解释如下:
我用的是CVF6.6版本.当按下的字符的编码(十进制)大于224时,char1得到的结果是相同的.查找getcharqq函数的说明文档可知,此时需要再次调用getcharqq函数,得到char2的值.这样,利用char1和char2两个变量,就可以确定按下的哪一个键了.
我来回复