2013-04-07 92 views
1

在我的函数中,我添加了一个if语句来保持用户输入正确的坐标,如果第一个if语句为false,则会导致无限循环。如果第一条if语句是正确的,第二条if语句是错误的,那么它工作得很好。C++ if语句导致无限循环

void Sheep::sheepProcess(BoardSet& board) 
{ 
    char middle; 

    cout << "Your move? "; 
    cin >> x1 >> y1 >> middle >> x2 >> y2; 
    if (correctInput(x1, y1, x2, y2)) 
    { 
     convertCoordinates(x1, y1, x2, y2); //x=z and y=w 

     if(board.legalMoveForSheep(z1, w1, z2, w2)) 
     { 
      board.adjustBoardForSheep(z1, w1, z2, w2); 

     } 
     else 
     { 
      cout << "Illegal Move, Try again" << endl; 
      sheepProcess(board); 

     } 

    } 
    else 
    { 
     cout << "Illegal input, Try again" << endl; 
     sheepProcess(board); 
    } 

} 

如果你需要更多的代码,比如bools。让我知道

编辑:

class Sheep { 
public: 

    void sheepProcess(BoardSet& board); 
    void convertCoordinates(char x1, int y1, char x2, int y2); 
    void initalizedItems(); 


private: 
    char x1, x2; 
    int y1, y2, z1, z2, w1, w2; 
}; 
+2

只有当您继续提供无效输入。尽管如此,这比循环更适合循环。 – 2013-04-07 20:23:22

+0

您是否将字符输入到数字中? – chris 2013-04-07 20:24:06

+1

如果不纠正,只需要给一次无效输入,以便将来调用'cin >> ...'失败。 – 2013-04-07 20:24:07

回答

0

你不是吃的站在准备上cin输入。接下来的阅读是获得相同的输入,也失败了,重复ad nauseam。

解决方案:当您检测到输入站立准备无效时,请将其丢弃,向用户抱怨提供的输入不正确并允许他重试。

+0

你会如何建议我吃点东西?如果输入正确或者是删除当前输入的一种方法,我是否会将if语句中的项目声明为0? – UnhinderedLimpidity 2013-04-09 16:05:35

+0

哦,我看到我可以使用'cin.clear()'命令将其删除。感谢您的帮助 – UnhinderedLimpidity 2013-04-09 16:07:33