首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++ I/O有关问题

2012-02-15 
C++ I/O问题。题目要求输入形如(800)空格555-1112这样的14位的电话号码,能进行输入的检查,如果输入正确才能

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;

热点排行