示例用户输入:
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;
}
}
}
答案 0 :(得分:1)
cin
的{{1}}成员函数不会清除剩余的输入,它会重置流上的错误标志(可能会设置,例如因为您尝试读取整数但是没有 - 输入中的数字字符)。我猜你真的想把输入丢弃到下一个换行符;一种方法是使用'\ n'作为分隔符调用clear
。
另一件可能是问题的事情(但可能只是在问题中遗漏了代码;))是你写的cin.ignore
循环反复询问输入,直到没有错误没有包含您在评论中谈到的董事会重绘逻辑。因此,在while(true)
函数找到无错输入并返回之前,您不会看到这一点。