2016-06-09 46 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,提供的答案是否適合你?如果是,請將其標記爲答案,如果不是的話:請評論你的答案。 –