2016-02-02 45 views
0

我想這樣的事情。它從5-1倒數秒。如何使用用戶輸入打破循環?

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

int main() 
{ 
    for(int i=5;i>0;i--) 
    { 
    cout<<"\n\n\n\n\n\n"; 
    cout<<setw(35); 
    cout<<i; 
    Sleep(1000); 
    system("CLS"); 
    } 
    system("PAUSE"); 
} 

而我試圖找出一種方法來打破循環使用(從鍵盤)的用戶輸入,打破它,而它的運行。我不知道如何做到這一點。我聽說過多線程。我甚至不知道多線程是否在我的情況下有任何應用。那麼,在執行循環時如何在中途將其分開,有什麼想法嗎?

+0

使用while循環和檢查cin在循環結尾。 –

+0

請您詳細說明檢查cin嗎? – anjanik012

+1

這可能會對您有所幫助。 [C++,實時用戶輸入,在While循環](http://stackoverflow.com/questions/19074646/c-real-time-user-input-during-while-loop) –

回答

0
  • 試試這個:

    #include<iostream> 
    using namespace std; 
    int main() 
    { 
        int i = 1; 
        while(i) 
        { 
        // do your work here 
        cin>>i; 
        } 
        cout<<"Terminated"<<endl; 
    } 
    

    繼續掃描INT I,當你想打破循環的輸入值給出0,你的循環將terminatd。

+0

到的問題是如何從用戶檢測用戶輸入而在循環顯示的值(並打破了一些輸入條件下的循環),而不是如何在循環中收集用戶的輸入。 – crashmstr

+0

我認爲anjanik012想要打破循環,因爲他在評論中提到 –

+0

是的,他希望在*顯示*'i'的時候打破循環,而不是在爲'i'輸入時(或者甚至停止用戶輸入,因此爲什麼線程化被提及)。非常不一樣。 – crashmstr

0

我想你會需要一個線程來做到這一點。

在主循環添加一個全局變量, 使用一個線程接收命令行輸入和修改您的全局變量。

聲明一個全局變量

bool stop = false; 

創建一個線程讀取標準輸入和修改的主要 '一站式'

DWORD WINAPI thread1(LPVOID pm) 
{ 
    //check the getchar value 
    int a = getchar(); 
    while (a != '0'){ 
     a = getchar(); 
    } 
    stop = true; 
    return 0; 
} 

HANDLE handle = CreateThread(NULL, 0, thread1, NULL, 0, NULL); 
for(int i=5;i>0 && !stop;i--) 
    { 
    cout<<"\n\n\n\n\n\n"; 
    cout<<setw(35); 
    cout<<i; 
    Sleep(1000); 
    system("CLS"); 
    } 
+0

我能夠通過這要歸功於建議創建一個線程,但我仍然無法打破循環。 – anjanik012

+0

你能成功設置全局變量嗎?你的循環條件如何?設置一個斷點來查看程序停止的地方。 – LKW

+0

我想在線程1功能while循環不打破,並停止是不是被updated.I嘗試了一些方法來打破它一個被更新時,但不能這樣做。 – anjanik012