2015-11-24 28 views
1

我試圖用這個方法來讀取每個球員的名字:如何正確讀取從標準輸入一個值的變量

string Jogador::askname(){ 
    string aux; 
    cout<<getname()<<" Insira o seu nome: "; 
    cin.get(); 
    //getline(cin,aux); 
    //gets(aux); 
    cin.getline(aux,sizeof aux,'\n'); 
    //setname(aux); 
    cout<<endl; 
    return aux; 
} 

它工作正常的第一個電話,但是當我再次調用它,它剪切字符串的第一個字母。我試過使用cin.get()/cin.ignore(),似乎沒有任何工作。有什麼建議麼?

+0

'cin.get()'返回的數據流的第一個字符,你是怎麼想的是什麼。 –

+0

我的老師說這是用來獲取緩衝區中包含的'\ n'。 – Ferro

回答

2

我認爲你想從鍵盤得到aux

std::getline需要一個流和一個字符串。直到新行的流的內容都放入字符串中。

因此,你可以這樣寫:

std::string Jogador::askname() { 
    std::string aux; 
    std::cout << " Insira o seu nome: " << std::endl; 
    std::getline(std::cin, aux); 
    //this->name = aux; // This sets the name. Now you don't need `setname` 
    return aux; 
} 
+0

嗯,我複製了這段代碼,現在它完全忽略了第一次調用的輸入。它跳轉到第二個調用。我這樣調用這個方法:j1.setname(j1.askname());然後再次爲玩家2 j2.setname(j2.askname()); 。現在它直接跳到玩家2(j2) – Ferro

+0

你的意思是什麼「呼叫」? – erip

+0

每次使用時 – Ferro