2016-11-08 54 views
-4

當我按下Enter鍵時,我想完成我的do-while循環。你有什麼想法來解決這個問題嗎?我試圖檢查ENTER鍵的ASCII碼,但沒有成功。無法通過按Enter鍵完成執行循環

    do{ 
        for(int dongu=0;dongu<secimSayi;dongu++) 
        { 
         cout<<"-"; 
         sleep(1); 
         if(dongu==secimSayi-1) 
         { 
          cout<<">"<<endl; 
         } 
        } 
        for(int dongu2=0;dongu2<secimSayi;dongu2++) 
        { 
         cout<<" "; 
        } 

        for(int dongu3=secimSayi;0<dongu3;dongu3--) 
        { 

         cout<<"-\b\b"; 
         sleep(1);        
         if(dongu3==1) 
         { 
          cout<<"<"<<endl; 

         } 
        } 

       }while(getchar()== '\n'); //I want to end this do-while loop when I pressed ENTER 
+0

我沒有看到這裏,試圖按下時,輸入退出循環的任何代碼。 – Carcigenicate

+0

您可能需要使用'cin'讀取輸入內容。 –

+0

(1)不要發送垃圾郵件標籤。 C和C++是不同的。 (2)按照本網站幫助中心的建議發佈適當的示例。 – StoryTeller

回答

1

我不認爲在C++中有這樣的標準解決方案,通常不是標準控制檯程序的工作方式。

最標準的方法可能是使用threads,其中一個線程等待直到讀取一行,然後通過設置std::atomic<bool>通知主線程。
(參見示例)

另一種解決方案可能是根據操作系統查找合適的庫。在linux上,你可以使用ncurses,在windows上,也有support。這也應該更好地控制程序的輸出。

舉例螺紋的方法:

#include <iostream> 
#include <thread> 
#include <chrono> 
#include <atomic> 

class WaitForEnter 
{ 
public: 
    WaitForEnter() : finish(false) 
    { 
    thr = std::thread([this]() { 
     std::string in; 
     std::getline(std::cin, in); 
     finish = true; 
     }); 
    } 
    ~WaitForEnter() 
    { 
    thr.join(); 
    } 
    bool isFinished() const { return finish; } 
private: 
    std::atomic<bool> finish; 
    std::thread thr; 
}; 

int main() 
{ 
    WaitForEnter wait; 
    while (! wait.isFinished()) 
    { 
     std::cout << "." << std::flush; 
     std::this_thread::sleep_for(std::chrono::seconds(1)); 
    } 
    std::cout << "\nfinished\n"; 
} 
+0

我認爲有,但你需要爲所有操作系統編碼,例如OpenNI有[xnOSWasKeyboardHit](https://github.com/OpenNI/OpenNI/blob/master/Source/OpenNI/Linux/LinuxKeyboard.cpp) ,所以你可以使用'while(!xnOSWasKeyboardHit()){code ...}' – cpatricio

+0

@cpatricio:我不知道它,但它仍然是一個庫,而不是使用標準的C++。鏈接指向linux鍵盤。你確定它是獨立的嗎?無論如何,如果您認爲這是一個更好的解決方案,請隨時自行回答。 – stefaanv

+0

@cpatricio:再看一次之後,來自opengroup的termios.h是相當標準的,但不是標準的C++(它不支持在windows上)。但這是提供基於輪詢的輸入的好方法。 – stefaanv