如何在istream&中输入字符串操作者

时间:2013-11-29 06:25:32

标签: c++

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

当我调试代码并进入 is.getline(nm,100)时,它不会提示我输入任何内容而只是跳转到下一行,将 nm保留为NULL

我该怎么办.. ??

2 个答案:

答案 0 :(得分:1)

很可能,您可能在前一个操作的输入缓冲区中保留了一个尾随换行符,可能涉及operator>>和其他一些变量。 getline正在读取该尾随换行符,这正是它正在查找的内容,因此它不会提示输入任何内容。

有多种方法可以解决这个问题,但这取决于您认为IntlPhoneNumberWS对象的有效输入。例如,您可以调用getline一次,如果您得到一个空字符串,请再次调用它。

答案 1 :(得分:0)

您正在使用错误的方法和/或类来完成工作。 istream :: getline从输入字符并将它们存储到提供的char缓冲区中。见http://www.cplusplus.com/reference/istream/istream/getline/