c++ - 错误打印不正确。这个逻辑流程是否正确? C++

标签 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;
 }
 }
}

最佳答案

cinclear 成员函数不会清除剩余的输入,它会重置流上的错误标志(这可能会被设置,例如因为你试图读取一个整数,但输入中有非数字字符)。我猜你真的想丢弃输入到下一个换行符;一种方法是调用 cin.ignore 并将 '\n' 作为分隔符。

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

关于c++ - 错误打印不正确。这个逻辑流程是否正确? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2572540/

相关文章:

c++ - 用于提取存档文件的库

c++ - 如何通过TCP接收多个文件并在C++中同时保存它们?

c++ - 使用返回类型作为派生类的指针

c++ - float 分配不正确

haskell - Haskell 中的短路 (&&)

c++ - 按值传递 bool 是否保证有效?

ruby - 如果一个空字符串为真有什么好处?

c++ - 在不创建 vector 的情况下检查 Rcpp 中的非有限值

java - 如何在 Smali 中将 iput-object boolean 值设置为 true?

mysql - 使用 mysql、pthreads 和 gtk 在 C++ 中编译