C++ 如何在istream&;中输入字符串;操作人员 istream&operator>>(istream&is,IntlPhoneNumberWS&obj) { 碳纳米[100]; 难道你在工作中使用了错误的方法和/或课程吗。 istream::getl

C++ 如何在istream&;中输入字符串;操作人员 istream&operator>>(istream&is,IntlPhoneNumberWS&obj) { 碳纳米[100]; 难道你在工作中使用了错误的方法和/或课程吗。 istream::getl,c++,C++,如何在istream&;中输入字符串;操作人员 istream&operator>>(istream&is,IntlPhoneNumberWS&obj) { 碳纳米[100]; 难道你在工作中使用了错误的方法和/或课程吗。 istream::getline从输入流中提取字符并将其存储到提供的字符缓冲区中。请参阅,很可能是由于上一次操作,输入缓冲区中还保留了一个尾随的换行符,可能涉及运算符>和其他一些变量。getline正在读取该字符串生病的新行,这正是它正在寻找的,因此它不会提示任何更多的

如何在istream&;中输入字符串;操作人员
istream&operator>>(istream&is,IntlPhoneNumberWS&obj)
{
碳纳米[100];

难道你在工作中使用了错误的方法和/或课程吗。
istream::getline从输入流中提取字符并将其存储到提供的字符缓冲区中。请参阅,很可能是由于上一次操作,输入缓冲区中还保留了一个尾随的换行符,可能涉及
运算符>
和其他一些变量。
getline
正在读取该字符串生病的新行,这正是它正在寻找的,因此它不会提示任何更多的输入


有多种方法来处理这一点,但这取决于你认为你的代码输入有效的输入:“ItLoPrimeNoBWS 对象”。例如,你可以调用<代码> GETLION>代码>一次,如果你得到一个空字符串,请再次调用它。

不要在操作符中输出任何东西。提示应该在操作符之外处理。Y,<代码> NM永远不会是<代码> null <代码>,虽然它可能是空的。哦,您可能需要检查以确保没有设置任何标志,以及检查是否安全。至少对于调试。您调用的是这样的CIN > > OBJ;还应该考虑开始使用和不。在当前对象中删除该字符串,但is.getline()不会提示输入字符串…因此应该使用is.ignore()为了克服这个问题..@user2901571:如果你这样做,它将无条件地跳过字符,即使之前的操作中没有尾随的换行符。在我看来,这不太可能是你真正想要的。但是,我不知道你真正想要的是什么。我在我的答案中提出了一个建议,基于我对我认为您希望发生的事情。他确实希望从输入流中提取字符并将它们存储在缓冲区中。那么,这是一个错误的工作工具吗?啊,我明白了。让我感到不舒服的是在运算符定义中使用cout。我假设(错误地?)他试图使用getline()直接从用户那里获取输入。显然(?)这里的情况并非如此,尽管在他的问题中,他说:“这不会提示我输入任何内容,而只是跳到下一行”。那么,这些角色是否已经在istream中?
istream& operator>>(istream& is, IntlPhoneNumberWS& obj)
{

    char nm[100];
    cout << "Subscriber   : ";
    is.getline(nm, 100); //problem
    obj.set(nm); //sets nm to current object; 
    return is;
}

void IntlPhoneNumber::set(char* nm) //only example
{
    strcpy(name,nm);
}