Почему тройное вложение для l oop не работает во второй раз в C? - PullRequest
1 голос
/ 21 января 2020

Edid: Спасибо за предложения, но ни одно из них не работает для ошибки FOR l oop. Почему тройка, вложенная в l oop (строки 82 - 98), работает только в первый раз (правильно), а затем просто выплевывает сумасшедшие случайные числа? В первый раз он работает так хорошо, а потом все делает не так. Спасибо за помощь!

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>

// 2 players, 5 zara, 3 puti(ako ne si gi haresa), moje da pazite:
//1 qift
// 2 qifta
// ful: 1*2 i 1*3
// 5 ednakvi: general
// 4 ednakvi
// 1*3
// 5 poredni
// shans
// izpulnqvase 8 puti i moje da se zapazva zara (samo pri 1 i 2 hvurlane)
int np, otg[5], otg10[5];

int check_pairs(int *otg10, int time){
        int dicecopy[5];
        memcpy(dicecopy, otg10, sizeof(int) * 5); 
        for(int k = 0; k < 5; k++){
            printf("%d " , dicecopy[k]);
        }
    int pairs = 0, sum = 0;

    for(int i = 0; i < 5; i++){
        for(int j = 0; j < 5; j++){
            if(dicecopy[i] == dicecopy[j])
                pairs++;
        }
    }

    // points
        if(pairs == 1*2 || pairs == 2*2){
            printf("GGGGGGG");
            for(int k = 0; k < 5; k++){
                sum += dicecopy[k];
            }
        } else {
            return 0;
        }
        return sum;
}

int main(){

    printf("How many players do you want: ");
        scanf("%d" , &np);
    int points[np];
    for(int i = 0; i < np; i++){
        points[i] = 0;
    }

    int dice[8][np][3][5];
    srand(time(NULL));

    for(int i = 0; i < 8; i++){
        for(int j = 0; j < np; j++){
            for(int c = 0; c < 3; c++){
                for(int k = 0; k < 5; k++){
                    dice[i][j][c][k] = rand() % 6 + 1;
                }
            }
        }
    }

    /*     for(int i = 0; i < 8; i++){
        for(int j = 0; j < np; j++){
            for(int c = 0; c < 3; c++){
                for(int k = 0; k < 5; k++){
                    printf("%d " , dice[i][j][c][k]);
                }
                putchar('\n');
            }
            putchar('\n');
        }
        putchar('\n\n');
    } 
    */
    char anws = 'y';

    for(int i = 0; i < 8; i++){
        for(int j = 0; j < np; j++){
            printf("\nPlayer: %d\nPoints: %d\n" , j + 1 , points[j]);
            for(int k = 0; k < 3; k++){
                for(int l = 0; l < 5; l++){
                    otg10[l] = dice[i][j][k][l];
                    printf("%d " , otg10[l]);
                }
                printf("\n\nDo you like it?\n");
                scanf("%s" , &anws);
                if(anws == 'y' || anws == 'Y'){
                    points[j] = check_pairs(otg10 , k);
                    break;
                }
            }
        }
    }
    return 0;
}

Код еще не закончен. Мне нужно больше работать над другими проверками. Кстати, это будет игра под названием Generala, если у вас есть предложения, я бы хотел их услышать!

...