2014-01-25 39 views
0

我是新來的代碼和這個網站,所以請原諒我,如果我忽略了明顯的東西。我一直在嘗試用C++編寫一個簡短的小遊戲,並且我需要接受用戶輸入。我想收錄一個以上的單詞,所以我的書推薦的cin>>命令是正確的。我通過研究發現的最好的東西是getline(cin,var);命令。我可以很容易地在小型測試中工作,但是當我將其應用到我的500線遊戲中時,它無法工作。它將直接跳過那段代碼而不用等待用戶輸入,並將變量設置爲空格。顯然,我不會包含整個代碼,但這裏有一點問題,還有我的標題。干擾getline函數的東西?

#include <cstdlib> 
#include <windows.h> 
#include <iostream> 
#include <string> 
using namespace std; 
string poemend; 
int heading; 

int poem() 
{ 
    system("CLS"); 
    cout<<"This poem is almost done, you just can't seem to find the perfect last word.\n"; 
    cout<<"You can see several of your discarded endings. Most recently, 'pain'.\n\n"; 
    cout<<"How about another go?\n>"; 
    getline(cin,poemend); 
    system("CLS"); 
    cout<<"The Prophet's old parrot spoke much of all things,\n"; 
    cout<<"but when asked about love, squawked only "; 
    cout<<poemend<<" .\n\n"; 
    Sleep(6000); 
    cout<<"You decide it could still use some work"; 
    Sleep(3000); 
    heading = 6; 
} 

再次,這完美的作品,如果我藉此到新的空白頁面,所以我真的不知道是什麼的方式獲得。如果需要,我會很樂意回答有關代碼的任何問題,併發布更多有用的信息。非常感謝您花時間閱讀本文!

+0

請使用一個小缺口 –

+0

,你沒有向我們展示的是問題的代碼。 – 0x499602D2

+0

您向我們展示的代碼沒有問題。你能發佈更多與流有關的代碼嗎? – 0x499602D2

回答

0

有時清除輸入緩衝區是神奇的。這可能會或可能不會在您的senario中,但請嘗試此代碼。

cin.ignore(cin.rdbuf()->in_avail()); 
cin.getline(cin,poemend); 
cin.clear(); 

本質上用忽略代碼和cin.clear包裝你的getline。

+0

錯誤:沒有匹配函數調用'std :: basic_istream :: getline(std :: istream&,std :: string&)'| 這是什麼意思? – Hammurabi8

+0

這意味着getline函數不會被重載來處理當前函數中的變量數據類型。 Wifey和我很快就會有約會的晚上,所以我不能做很多研究讓你工作,但試試這個頁面。 HTTP://www.cplusplus。com/reference/string/string/getline/ –

+0

現在你得到一個錯誤是很好的,因爲這意味着刷新輸入緩衝區已經解決了getline被完全跳過的最初問題。現在你只需要弄清楚你需要把什麼放到getline()函數中。 –

0

您仍然有一個換行符,它是以前無格式輸入操作的剩餘部分。你必須丟棄它使用std::ws。此外,經常檢查如果輸入成功:

if (std::getline(std::cin >> std::ws, poemend)) 
//    ^^^^^^^^^^^^^^^^^^^