簡體   English   中英

使用std :: cin輸入停止while循環

[英]Stopping while-loop with std::cin input

我目前正在嘗試創建一個僅在用戶輸入“退出”,“退出”或類似內容時才停止的循環。 我已經嘗試了幾種變體,但是我需要它來執行循環的其余部分,而不是停下來等待輸入。

Running = true;
while(Running)
  {
    char c;
    std::cout << "test ";
    c = std::cin.peek(); 
    if(c=='Q'|| c=='q')
    {
    Running = false;
    }
  }

任何幫助將不勝感激。

除了peek()返回int_type ,不是char ...

...它從流中讀取下一個字符,而無需實際提取它

由於您的cin確實,在這一點上, 不包含任何 (除非你通過管道輸送的東西你的程序,或者已經輸入的東西),調用將阻塞 ,直到要角色peek()版。

因為使用<iostream> ,您的程序直到按下Enter真正接收 輸入 ,所以程序將執行以下操作:等待輸入內容,然后按Enter

只有這樣,它的程序檢查您輸入的第一個字符是“q”或“Q”。 您輸入的 (包括第一個字符) 將保留在流中 -因此,下次您peek() ,它仍將是相同的字符。

解? C ++標准庫中沒有cin的無阻塞查詢。 您要么必須使用線程,要么必須參考某些第三方輸入處理(例如Microsoft Windows或NCurses庫提供的getch()函數)。

就是這樣做。

std::string input;
cin>>input;
while(input!="quit" && input!="Quit")
{
// do something;
// get input.
}

不知道你是什么意思

我需要它來執行循環的其余部分,而不是停止等待輸入。

但是,如果將c=std::cin.peek()替換為std::cin >> c ,則會解決無限循環問題。

Running = true;
while (Running)
{
    char c; 
    std::cin >> c;
    std::cout << "test";

    if (c == 'Q' || c == 'q')
    {
        Running = false;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM