错误无法正确打印..这个逻辑流程是否正确? C ++

时间:2010-04-03 20:20:05

标签: c++ boolean

示例用户输入:

PA1 9 //correct 
PJ1 9 //wrong, error printed "Invalid row" because it is not between A and I 
PA11 9 //wrong, error printer "Invalid column" because it is not between 1 and 9.

我遇到的问题是它应该清除剩余的输入,然后要求用户再次进入“移动”,而不是。

我哪里出错了?我已经有一段时间了,仍然没有进展..

void clearInput()
{ 
 cin.clear();
}

bool getCoords(int & x, int & y)
{
 char row;

 while(true){
 cin>>row>>y;
 row=toupper(row);

 if(/*(id=='P' || id=='p' || id=='D' || id=='d') &&  */row>='A' && row<='I' && isalpha(row)  && y>=1 && y<=9){ 
     x=row-'A';
  y=y-1; 
  return true;
 }

 else if(!(y>=1 && y<=9)){
  cout<<"Invalid column\n"<< endl << endl;
  cout<<y;
  clearInput();
  cout<<y;
  //return false; 
 }
 else{
  cout<<"Invalid row\n"<< endl << endl;
  clearInput(); 
  //cout<<x<<y;
  //return false;
 }
 }
}

1 个答案:

答案 0 :(得分:1)

cin的{​​{1}}成员函数不会清除剩余的输入,它会重置流上的错误标志(可能会设置,例如因为您尝试读取整数但是没有 - 输入中的数字字符)。我猜你真的想把输入丢弃到下一个换行符;一种方法是使用'\ n'作为分隔符调用clear

另一件可能是问题的事情(但可能只是在问题中遗漏了代码;))是你写的cin.ignore循环反复询问输入,直到没有错误没有包含您在评论中谈到的董事会重绘逻辑。因此,在while(true)函数找到无错输入并返回之前,您不会看到这一点。