[英]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.