2017-09-27 52 views
0
char input_Handler(int& error,int user,const char satir[]){ 
    string cheyeni; 
    int error_string = 0; 
    char che; 
    char test; 

    cout << "Please enter your move with keyboard letters such as 'A' or 'a'\n"; 
    //cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
    //cin.ignore(); 
    // 
    cin.ignore(); 
    getline(cin,cheyeni); 
........rest is not here 

我有這個函數來處理我的遊戲輸入。這個函數在遊戲中被多次調用。在第一次調用中它正確處理輸入。但是當再次調用時,它表現得很愚蠢。從我在網上的搜索中,人們總是說getline不會在我按Enter時分配換行符,所以當再次調用它時,它不會從我那裏得到輸入,而是將'\ n'賦給我的字符串(cheyeni)自動。C++ getline在第一次調用後被跳過

我似乎無法解決這個問題,我嘗試了多種事情cin.sync(),cin.ignore()。雖然您可能認爲我錯誤地使用了它,但在getline之後的getline之前,我嘗試了很多方法。但是,我仍然可能/可能是錯誤的。我似乎無法完全看到我失蹤的部分在哪裏。

用戶希望輸入一些字符串或字母。

+0

爲了澄清,當我調試我的程序,對函數第二次調用它要你輸入而不是在函數getline()調用,這就是所謂的之前/應該叫。然後,我分配輸入後,它繼續流,但它沒有分配我的cin輸入到字符串。 – opricnik

+2

那麼你顯然在輸入緩衝區中有一個剩餘的換行符,調用'ignore'應該將其刪除。如果它似乎不起作用,那麼你可能在輸入緩衝區中有多個*新行?您能否請嘗試創建一個[最小,完整和可驗證的示例](http://stackoverflow.com/help/mcve)供我們查看,並*顯示*您輸入的程序的輸入? –

+0

@DragonRock它得到分段錯誤。 – opricnik

回答

1

將您cin.ignore()下面getline()

getline(cin,cheyeni); 
cin.ignore();