2014-10-04 45 views
1

下面是一個非常簡單的應用程序來說明我遇到的問題。我想執行暫停並等待輸入test = cin.readline();,但它不會。如果我刪除cin >> test;那麼它暫停。QTextStream stdin readline不會暫停輸入

爲什麼此代碼的行爲如何,我如何獲得我想要的行爲?

回答

3

可能緩衝區仍然有一個結尾字符'\n'cin.readLine();接受 - 嘗試在執行cin.readLine()之前用cin.flush()刷新它。


此代碼工作:

QTextStream cin(stdin); 
QTextStream cout(stdout); 

QString test; 

cout << "Enter a value: "; 
cout.flush(); 
cin >> test; 

cout << "Enter another value: "; 
cout.flush(); 
cin.skipWhiteSpace(); //Important line! 
test = cin.readLine(); 
cout << test; 
return 0; 

你只需要cin.readLine()前加cin.skipWhiteSpace(),正如我之前所說的「\ n」字符仍處於緩衝和方法擺脫它。

+0

我試過...相同的結果 – Leon 2014-10-04 10:55:34

+1

我在電腦上檢查過它,當你執行cin.readLine()時,我確信它是關於'\ n'的字符。它暫停兩次。 – 2014-10-04 11:05:23

+0

你是對的。看來你需要先清除緩衝區。這裏是類似的東西,但我不知道如何應用這是一個QT上下文http://stackoverflow.com/questions/257091/how-do-i-flush-the-cin-buffer – Leon 2014-10-04 11:20:51