C++ I/O问题。
题目要求输入形如(800)空格555-1112这样的14位的电话号码,能进行输入的检查,如果输入正确才能将输入的值赋给类中的成员。我的重载>>的代码如下:
class PhoneNumber
{
public:
friend ostream &operator<<(ostream &output,PhoneNumber &pn);
friend istream &operator>>(istream &input,PhoneNumber &pn);
void print(){cout<<"Input received,saving data into class...";cout<<"Data saved.";}
private:
string areaCode;
string exchange;
string line;
int error;
};
istream &operator>>(istream &input,PhoneNumber &pn)
{
char ac[20],ex[20],li[20];
input.ignore();
input>>setw(3)>>ac;
input.ignore(2);
input>>setw(3)>>ex;
input.ignore();
input>>setw(4)>>li;
int length = strlen(ac)+strlen(ex)+strlen(li);
cout<<ac;//<<" "<<ex<<" "<<li; //按照上面的实例输入(800) 555-1112后ac并不是800,而是80.
while(1); //为什么呢?
if(length != 14)
pn.error = 1;
cout<<pn.error;
while(1);
if(ac[0] == 0 || ac[0] == 1)
pn.error = 1;
if(ac[1] != 0||ac[1] != 1)
pn.error = 1;
if(pn.error != 1)
{
pn.areaCode = ac;
pn.exchange = ex;
pn.line = li;
}
return input;
}
[解决办法]
setw 都+1:
input.ignore();
input>>setw(4)>>ac;
input.ignore(2);
input>>setw(4)>>ex;
input.ignore();
input>>setw(5)>>li;