2015-07-21 5 views
1

Вот моя проблема .... В приведенном ниже коде между char guess[4] и cin >> guess мой answer элемент в индексе 0 исчез. Кто-нибудь знает почему?Случайная потеря данных в массиве C++

while(bullCount != 4) 
{ 
    //Create the answer 
    char answer[4]; 

    for(int loops = 0; loops < 4; loops++) 
    { 
     answer[loops] = createAnswerDigit(seed); 
    } 

    //Reset bullCount and cowCount from previous loop 
    bullCount = 0; 
    cowCount = 0; 

    cout << "Enter your guess [1000-9999]: "; 

    //Guess by player 
    char guess[4]; 

    cout << "Answer[0]: " << answer[0] << "\n"; //Prints "Answer[0]: 4 

    //Retrieve guess by player 
    cin >> guess; 

    cout << "Answer[0]: " << answer[0] << "\n" //Prints "Answer[0]: " 

    for(int digitLoc = 3; digitLoc >= 0; digitLoc--) 
    { 
     //Do check backwards to prevent mistaking bulls for cows 
     int check = checkGuess(guess[digitLoc], digitLoc, answer); 

     if(check == cow) 
     { 
      cowCount++; 
     } 

     else if(check == bull) 
     { 
      bullCount++; 
     } 
    } 
} 
+0

что делает createAnswerDigit делать? –

+0

Что вводит 'cin >> guess'? – AndyG

+0

@VerenaHaunschmid Возвращает представление символа случайной цифры (atm возвращает то же самое снова и снова для тестирования). –

ответ

5

guess имеет размер 4, однако, ввести число между 1000 - 9999, которая долго 4 символов. Помните, что в строке должна быть \0 в конце строки, поэтому guess - 1 символ. Это может быть перезапись первого элемента answer. Попробуйте сделать guess размером 5 или лучше, используйте вместо этого std::string.

+0

Я попробую, но я не думаю, что это важно, потому что это не c-строка. Это 4-значное число, разделенное на 4 символа. –

+0

Редактировать: Nvm IT WORKS !! Спасибо чувак! Об этом думали последние пару часов ....: D –

+0

@ J.Alvaro.T Если проблема решена, вы должны отметить ответ как принятый. – yizzlez

0

Очевидно, что guess представляет собой массив из 4 символов. Всякий раз, когда пользователь вводит символы в диапазоне 1000-9999, у него нет места для терминатора строк '\ 0'. Таким образом, вам нужно определить массив, как:

char guess[5]; 

или вы можете использовать string реализации слишком

Смежные вопросы