1
下面是一個非常簡單的應用程序來說明我遇到的問題。我想執行暫停並等待輸入test = cin.readline();
,但它不會。如果我刪除cin >> test;
那麼它暫停。QTextStream stdin readline不會暫停輸入
爲什麼此代碼的行爲如何,我如何獲得我想要的行爲?
下面是一個非常簡單的應用程序來說明我遇到的問題。我想執行暫停並等待輸入test = cin.readline();
,但它不會。如果我刪除cin >> test;
那麼它暫停。QTextStream stdin readline不會暫停輸入
爲什麼此代碼的行爲如何,我如何獲得我想要的行爲?
可能緩衝區仍然有一個結尾字符'\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」字符仍處於緩衝和方法擺脫它。
我試過...相同的結果 – Leon 2014-10-04 10:55:34
我在電腦上檢查過它,當你執行cin.readLine()時,我確信它是關於'\ n'的字符。它暫停兩次。 – 2014-10-04 11:05:23
你是對的。看來你需要先清除緩衝區。這裏是類似的東西,但我不知道如何應用這是一個QT上下文http://stackoverflow.com/questions/257091/how-do-i-flush-the-cin-buffer – Leon 2014-10-04 11:20:51