2012-05-27 49 views
1

我寫了一個簡單的計時器。通過按「s」(不按回車提交),計時器(for-loop)將開始。這是一個無止境的循環。我想在用戶按下「s」時立即停止它,就像我啓動它的方式一樣。一旦按下「s」(不按回車提交),循環應該停止。怎麼做?通過實時按下某個鍵來停止循環

#include <iostream> 
#include <stdlib.h> 
#include <conio.h> 
using namespace std; 

int main() 
{ 
    char ch; 
    int m=0,h=0; 
    if ((ch = _getch()) == 's') 
     for (int i=0;;i++) 
     { 
      cout << "h m s" << endl; 
      cout << h << " " << m << " " << i; 
      system("CLS"); 
      if (i==60) {i=0;m+=1;} 
      if (m==60) {m=0;h+=1;} 
      if (h==24) {h=0;} 
     } 
    return 0; 
} 

回答

3

有一個單獨的volatile變量,用作條件退出循環。

在一個單獨的線程上(只能監聽用戶輸入並保持循環同時進行)當用戶按"s"時修改該變量。

volatile bool keepLoopGoing = true; 

//loop 
for (int i=0; keepLoopGoing ;i++) 
    cout << i << endl; 

//user input - separate thread 
while (keepLoopGoing) 
{ 
    cin >> input; // or getchar() 
    if (input == "s") 
     keepLoopGoing = false; 
} 

注意那你很可能會漫i你按下任何東西之前。

+0

我不明白你的意思。我是業餘的。我不想用cin >> s;所以用戶按下一個鍵,然後使用if命令來檢查它是否爲「s」,然後中斷循環。它不是實時的,它停止按下一個字符的屏幕,然後它會繼續,我需要一些實時影響的東西。 – Nofuzy

+1

@Stranger如果你啓動不同的線程來監聽輸入,它不會「停止」屏幕。閱讀主題。 –

+0

我已更新第一篇文章。希望它現在更清楚:) – Nofuzy