2013-09-29 28 views
1

我的程序是假設輸出第一中學姓工作而忽略了,那就是在輸入。但在我的程序中,逗號仍然在我的輸出中,所以顯然我錯過了一些東西。cin.ignore()沒有在程序

#include <iostream> 
#include <string> 
using namespace std; 
char chr; 
int main() 
{ 
string last, first, middle; 
cout<< "Enter in this format your Last name comma First name Middle name."<<endl; //Input full name in required format 
cin>>last;                   //receiving the input Last name 
cin>>first;                   //receiving the input First name 
cin>>middle;                  //receiving the input Middle name 
cout<<first<<" "<<middle<< " " <<last;            //Displaying the inputed information in the format First Middle Last name 
cin.ignore(',');                 //ignoring the , that is not neccesary for the new format 
cin>>chr; 

return 0; 
} 
+0

您接受CIN的名字,你忽略了逗號前? –

+0

還我不認爲你想cin.ignore –

+2

你能解釋一下你期待這個做什麼?看起來你的'cin.ignore(',')'在錯誤的地方[並且有錯誤的參數]。 –

回答

0

可以從流挑逗號:

std::istream& comma(std::istream& in) 
{ 
    if ((in >> std::ws).peek() == ',') 
     in.ignore(); 
    else 
     in.setstate(std::ios_base::failbit); 
    return in; 
} 

int main() 
{ 
    string last, first, middle; 

    cin >> last >> comma >> first >> comma >> middle; 

    cout << first << " " << middle << " " << last; 
} 
2

ignore函數作用於當前輸入流(例如cin),並且如在第一個參數指示將丟棄儘可能多的字符,直到它找到作爲第二個參數給出的分隔符​​(默認爲EOF)。

所以,你有它的方式,cin.ignore(',');會忽略44個字符,直到EOF,已打印給出的輸入之後。這幾乎肯定不是你想要做的。

如果你想跳過一個逗號,那麼你將要爲姓氏的輸入和名字的輸入端之間調用cin.ignore(100, ',');。這將跳轉到輸入中的下一個逗號(最多100個字符)。

+0

我試過改變cin.ignore(',');給cin.ignore(100,',');並把它放在cinlast和第一我之間也放在其他幾個地方,它只是導致我的輸出不出現。我的程序應該讓用戶用格式輸入他們的名字。最後,第一中間然後輸出第一中間最後沒有逗號。 –

+0

我給我的導師發了一封電子郵件,請求我的cin.ignore幫助,這就是她給我回復的信息。問題是,當你最後閱讀 - 它包括逗號。所以你的cin.ignore需要2個參數,100,\ n。在這種情況下,你不需要cin.ignore。剛剛閱讀,然後中間。然後使用字符串函數「查找」逗號並創建一個從最後一個位置0開始到逗號前的位置的子字符串。問題是我不知道她在說什麼。我知道如何放置查找功能,但我沒有得到第二部分。 –