【问题标题】:Errors not printing correctly..Is this logic flow correct? c++错误打印不正确..这个逻辑流程正确吗? C++
【发布时间】:2010-04-03 20:20:04
【问题描述】:

用户输入示例:

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

【问题讨论】:

  • 实际上,我不知道这是否有任何意义,只需要一点代码。所以我正在开发数独游戏,基本上只要需要任何类型的用户输入,它如果有任何错误,询问“输入动作”,它应该说明该错误,然后像以前一样再次打印板,并要求输入动作。我的逻辑在这里的某个地方有缺陷:/跨度>

标签: c++ boolean


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 2020-11-20
    • 1970-01-01
    相关资源
    最近更新 更多