2013-06-23 137 views
0

只是爲了好玩,我試着用循環打印kbhit(),以便程序按下按鍵 無限地打印行,直到再次按下鍵盤。它編譯得很好,當運行時,只是給出了空白屏幕。沒有打印。但是一旦按下按鍵就結束程序。控制檯雖然沒有關閉。kbhit()與雙循環不能很好地工作

#include <stdio.h> 
#include <conio.h> 

int main() 
{ 
    while(1) 
    { 
    if(kbhit()) 
    { 
     while(1) 
     { 
     if(kbhit()) 
     { 
      goto out; 
     } 
     printf("Print Ed Infinitum Until Key Press"); 
     } 
    } 
    } 
    out: 
    return 0; 
} 

如何解決這個問題?

+1

[不使用goto方法(http://xkcd.com/292/)(另外,你可能是指「循環往復」;)) – Kninnug

+0

沒有,沒有幾個地方,許多用戶在這裏有建議使用goto。我探討了http://stackoverflow.com/questions/245742/examples-of-good-gotos-in-c-or-c和其他幾個帖子。 – user2178841

+1

在這種情況下,您可以通過立即在'if'中立即返回來輕鬆避免'goto'。如果您在退出「goto」之前必須做更多清理工作,可能會更合理。 – Kninnug

回答

1
int main(void){ 
    while(1){ 
     if(kbhit()){ 
      getch(); 
      while(1){ 
       if(kbhit()){ 
        getch(); 
        goto out; 
       } 
       printf("Print Ed Infinitum Until Key Press\n"); 
      } 
     } 
    } 
out: 
    return 0; 
} 
+0

這就是我想要的。感謝 – user2178841

0
  1. 程序開始
  2. 沒有鍵存在
  3. 第二,同時不執行
  4. 它旋轉在第一循環周圍

你按一個鍵:

  1. 第一個kbhit返回true
  2. 它進入第二循環
  3. 仍有存在的密鑰
  4. 第二的kbhit返回true
  5. 程序退出

您需要進入第二循環前刪除第一個按鍵,你應該提示自己按下一個鍵開始該程序。或者你可以跳進第二個循環。

相關問題