cin.ignore()不在程序中工作

时间:2013-09-29 17:20:30

标签: c++

我的程序假设输出First Middle Last名称并忽略输入中的名字。但是在我的程序中,逗号仍然在我的输出中,所以很明显我错过了一些东西。

#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;
}

2 个答案:

答案 0 :(得分:2)

ignore函数作用于当前输入流(例如cin),并丢弃第一个参数中指示的字符数,直到找到作为第二个参数给出的分隔符​​(默认值)作为EOF)。

所以,你有这种方式,cin.ignore(',');在你打印出给定的输入后,将忽略44个字符,直到EOF。这几乎肯定不是你想要做的。

如果您想跳过逗号,则需要在姓氏输入和名字输入之间调用cin.ignore(100, ',');。这将跳到输入中的下一个逗号(最多100个字符)。

答案 1 :(得分: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;
}