2016-05-15 88 views
1

我试图跳出一个for循环,在一个嵌套的if语句内。所以基本上我在做MasterMind游戏,并试图知道多少用户实际上是正确的(丢弃位置)。 。所以基本上我想出了将AI的二进制数字存储在一个数组中,然后将每个用户二进制数字与它进行比较。只要用户的二进制数字等于来自AI的一个二进制数字,那么它应该跳出for环...我想这样理解,我做的:分手for循环C++

void MasterMind::evaluateCorrection() 
{ 
    // AI : 1 1 1 0 
    //USER: 1 0 1 1 
    //Store AI In Array 
    int AI[3]; 
    int count = 0; 

    std::copy(binaries.begin(), binaries.end(), AI); 
    for(std::vector<char>::iterator itAI= numbers.begin() ; itAI != numbers.end(); itAI++) 
    { 
     for(int i=0; i<=3;i++) 
     { 
      char numberAt = *itAI; 
      int intNumberAt = numberAt - '0'; 
      if(intNumberAt = AI[i]) 
      { 
       cout << intNumberAt << " VS " << AI[i] << endl; 
       actuallyCorrect++; 
       break; 
      } 
     } 
    } 
    cout << "\n ACTUALLY CORRECT " << actuallyCorrect << endl; 
} 

所以,当我得到这个代码在bash:

BINARY : 
1111 


PLEASE ENTER A 4 DIGIT BINARY! OR PROGRAM WILL EXIT 

     1123 
YOU HAVE 2 POSITIONS CORRECT 
1 VS 1 
1 VS 1 
1 VS 1 
1 VS 1 

ACTUALLY CORRECT 4 

这显然是不正确的..我进入1123,它只是说4实际上是正确的......实际上只有2,其实是正确的1和1.请帮助!

+1

'AI [3]'是外的范围,因此必须不能访问'AI [I]''时I = 3'。 – MikeCAT

+2

'intNumberAt = AI [i]'是一个赋值,而不是比较。你确定这是你想要做的吗? – MikeCAT

+0

哇@MikeCAT WOWW ...我完成了 – JOHHNYDEP

回答

1
  • AI[3]是超出范围的,所以你不能访问AI[i]i=3和数组的大小应该增加。
  • intNumberAt = AI[i]是一项任务。使用==运算符进行平等检查。

尝试这种情况:

void MasterMind::evaluateCorrection() 
{ 
    // AI : 1 1 1 0 
    //USER: 1 0 1 1 
    //Store AI In Array 
    int AI[4] = {0}; // initialize for in case what is copied has insufficient number of elements 
    int count = 0; 

    std::copy(binaries.begin(), binaries.end(), AI); 
    for(std::vector<char>::iterator itAI= numbers.begin() ; itAI != numbers.end(); itAI++) 
    { 
     for(int i=0; i<=3;i++) 
     { 
      char numberAt = *itAI; 
      int intNumberAt = numberAt - '0'; 
      if(intNumberAt == AI[i]) 
      { 
       cout << intNumberAt << " VS " << AI[i] << endl; 
       actuallyCorrect++; 
       break; 
      } 
     } 
    } 
    cout << "\n ACTUALLY CORRECT " << actuallyCorrect << endl; 
} 
+0

也许是op想要AI [4]。关于'if(intNumberAt = AI [i])的好的观察'。我最近读了1993年困扰Sunsoft的优先级1的一个bug。经过一些密集的调试会话之后,他们将它追踪到一个读取'x == 2' 。程序员的手指已经在等号键上反弹,意外地按了两次而不是一次。这里操作符可能有一个“等号”键,不愿意承认按键。 ;) – sjsam