示例用户输入:
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;
}
}
}
最佳答案
cin
的 clear
成员函数不会清除剩余的输入,它会重置流上的错误标志(这可能会被设置,例如因为你试图读取一个整数,但输入中有非数字字符)。我猜你真的想丢弃输入到下一个换行符;一种方法是调用 cin.ignore
并将 '\n' 作为分隔符。
另一件可能成为问题的事情(但可能只是问题中遗漏的代码 ;))是您编写的 while(true)
循环重复请求输入直到没有错误不包含您在评论中谈到的板重绘逻辑。因此,在 getCoords
函数找到无错误输入并返回之前,您不会看到这一点。
关于c++ - 错误打印不正确。这个逻辑流程是否正确? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2572540/