2016-05-15 6 views
1

入れ子のif文の中でforループを抜けようとしているImだから、基本的にはMasterMind Gameをやっていて、実際にユーザーが実際にどのくらい正しいかを知ろうとしています。ですから、基本的には、AIのバイナリ番号を配列に格納してから、各バイナリディジットをそれと比較していました。ユーザーのバイナリディジットがAIのバイナリディジットに等しいとすぐに、ループ...私はそれについてこのように考えて、私がやった: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が実際に正しいと言いました...まあ実際には1と1に実際には2だけが実際にあります。

+1

あなたは 'AI [i]が' 'ときI = 3'にアクセスしてはならないので、' AI [3] '、範囲外のです。 – MikeCAT

+2

'intNumberAt = AI [i]'は代入であり、比較ではありません。これがあなたがしたいことだと確信していますか? – MikeCAT

+0

Wow there @MikeCAT Woww ...私はgoofをやった – JOHHNYDEP

答えて

1
  • AI[3]i=3と、配列のサイズを増加させなければならないときにAI[i]にアクセスしてはならないので、範囲外のです。
  • 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

多分オペルがAI [4]を望んでいました。 'if(intNumberAt = AI [i])'についての素晴らしい見解。1993年にSunsoftを悩ませた優先度1のバグについて最近読んだ。いくつかの集中的なデバッグセッションの後、 'x == 2' 。プログラマーの指は等しいキーでバウンスし、一度ではなく2回押してしまった。ここでopにはキープレスを認めることを嫌う「等しい」キーがあるかもしれない。 ;) – sjsam