Цикл while с некоторыми операторами if, получающими супер большие числа - PullRequest
1 голос
/ 18 июня 2019

Я занимаюсь пограничной игрой в C, и у меня возникают некоторые проблемы с циклом while и значениями, которые я получаю в выводе.

У меня есть массив с некоторыми случайными значениями вэто от -5 до 5 в 20% доски.и что я пытаюсь сделать, это просто добавить это значение в мою переменную с именем player.

int player1 = 0, player2 = 0, player3 = 0, player4 = 0;
int dice = 0, number_of_players = 0, number_of_players = 2;


while(player1 < 50 && player2 < 50){
    if(number_of_players == 2){
        dice = (rand() % 6) + 1;
        player1 += dice;
        if(border[player1] != 0){
            player1 = player1 + (border[player1]);
        }      
        dice = (rand() % 6) + 1;
        player2 += dice;      
        if(border[player2] != 0){
            player2 = player2 + (border[player2]);
        }      
    }   
}
if(player1 > player2) printf("Player 1 won. Score: %d", player1);
if(player2 > player1) printf("Player 2 won. Score: %d", player2);

Это код для моего массива под названием "border", он выше моего цикла while:

#define TAM 50

int border[TAM], i, pos, casas;
for( i=0; i<TAM; i++ )
    border[i] = 0;

i = 0;
while( i < (int)TAM*0.1 ){
    pos = rand() % TAM;
    if( border[pos] == 0 ){
        casas = (rand() % 5) + 1;
        border[pos] = casas;
        i++;
    }
}

i = 0;

while( i < (int)TAM*0.1 ){
    pos = rand() % TAM;
    if(border[pos] == 0){
        casas = (rand() % 5) + 1; 
        border[pos] = casas * (-1);
        i++;
    }
}

выход иногда равен 50, что я понятия не имею, как он получается, потому что он останавливает цикл, только когда игрок достигает 51 или выше.Я также получаю супер высокие значения, такие как: 299158477. Я новичок в C. Спасибо всем.

1 Ответ

0 голосов
/ 18 июня 2019

int dice = 0, number_of_players = 0, number_of_players = 2;

Ваш код не должен быть компилируемым, переменная объявляется дважды.


if(border[player1] != 0){
    player1 = player1 + (border[player1]);

Вам не нужен if(). Если border равно нулю, результат не изменится.


i = 0;
while( i < (int)TAM*0.1 ){
    pos = rand() % TAM;
    if( border[pos] == 0 ){
        casas = (rand() % 5) + 1;
        border[pos] = casas;
        i++;
    }
}

Это while() должно быть for().


while( i < (int)TAM*0.1 ){

должно быть

while( i < (TAM/10) ){

casas = (rand() % 5) + 1;

может быть должно быть:

casas = (rand() % 6) + 1;

потому что у вас есть кости? Во всяком случае, не очень важно для логики кода.


Когда player1 становится> = TAM (после player1 += dice;), вы получаете доступ к памяти вне border

player1 = player1 + (border[player1]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...