2016-06-09 89 views
-1

我想使用isCOBOL编译器在COBOL中检测按键事件。怎么做?如何做(!kbhit())COBOL等价?

EX在C:

if(time==despert_time){ while(!kbhit()){ Beep(500,500); } }

+0

大概你有一本手册? –

+0

因为COBOL最初设计时没有很多手段与人进行交互,所以编译器供应商通过它们自己的扩展增加了可用的简单DISPLAY和ACCEPT。你需要找出* if *和* how * isCOBOL是否允许你这样做。 'do'是一个简单的在线'PERFORM'。 –

+0

GUI还是不GUI?从控制台中,您可以通过调用Java System.in.Available()(如果终端不在线缓冲)来逃脱。如果涉及到图形,写一个小类来为keyPressed,keyReleased或keyTyped添加一个ActionListener和一个处理函数(取决于你想如何处理它)。总之,Java比COBOL可能更容易。如果你确实需要从COBOL中做到这一点,在接受按键(在GNU/Linux上)后,请使用“stty raw”,然后选择“调用”SYSTEM“。 Windows控制台将有不同的顺序。 –

回答

1

它看起来像你想从控制台的用户交互。 如果它是不是一个时间框架内发生的事情:哔

PERFORM FOREVER *> or UNTIL EXIT or UNTIL 0 = 1, depending on the available extensions 
    ACCEPT OMITTED *> or ACCEPT DUMMY [which you'd define as 77 DUMMY PIC X.], depending on the available extensions 
     BEFORE TIME 500 *> [or WITH TIMEOUT 500] this is a more or less common extension, with most vendors using a different time scale --> may need to change the 500 
    END-ACCEPT 
    IF keypressed NOT = timeout *> the actual var to be checked and the timeout value need to be checked in the docs 
     EXIT PERFORM 
    END-IF 
    CALL x'E5' 
     ON EXCEPTION *> the system call x'E5' for beep may not be available 
     DISPLAY SPACE AT 2080 WITH BEEP *> may not be available, too... 
    END-CALL 
END-PERFORM 

检查联机文档附带编译器(这是“适用于客户端只”,因此,我们无法查询)。

+0

如果您不接受(或downvote)答案:请始终发表评论。谢谢。 –

+0

谢谢你的支持! – Jonas

+0

@Jonas,提供的答案是否适合你?如果是,请将其标记为答案,如果不是的话:请评论你的答案。 –