Ho risolto, il problema principale con quel for, l'ho risolto con un controllo all'indietro che conosco un po' meglio rispetto ad avanti (sicuramente funzionerebbe anche in avanti, ma mi trovo meglio cos�) ovvero :
codice:
for (k = j; k >= 0; k--) {
                    if ( strcmp(player[y], a[k]) == 0) {
                        estratto = 1;
                        break;
                    }
Per quanto riguarda invece la visualizzazione era sbagliato il conteggio del limite di partitegiocatori e l'ho messo a (partitemax*4) che dovrebbe essere giusto, anche se nel sorteggio capita che per esempio , se un giocatore può giocare massimo 16 partite, ne gioca 17 e ne toglie in pratica 1 ad un altro che ne giocherà 15, perciò in futuro dovrò mettere a posto questo errore: ho provato a diminuire di 1 il limite massimo, ma succede poi che non mi sorteggia tot ultime partite, in base alle partite da giocare. Se a qualcuno servisse in futuro o volesse farci qualsiasi cosa, metto a disposizione il codice qui sotto. Ringrazio torn24 per l'aiuto fornito!
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX 32
#define N 20


int main() {
    int i, j, p, k,n, y, partitemax;
    int flag = 0;
    int estratto = 0;
    char s[MAX];
    char player[N][MAX];
    int partitegiocatori[N] = { 0 };
    char a[4][MAX];
    for (j = 0; j < 4; j++)
        a[j][0] = '\0';
    srand(time(NULL));
    do {
        printf("Inserire numero giocatori: ");
        scanf("%d",&n);
        if (n < 4 || n > MAX)
            printf("Valore errato: deve essere tra 4 e %d\n", MAX);
    } while (n < 4 || n > MAX);
    getchar();
    for (i = 0; i < n; i++) {
        printf("Giocatore %d: ", i + 1);
        gets(s);
        if (strlen(s) == 0) {
            printf("Nessun giocatore specificato - ripeti\n");
            i--;
        }
        else
            strcpy(player[i], s);
    }
    printf("\nInserire numero partite totali: ");
    scanf("%d", &p);
    partitemax = p / n;
    printf("Per un gioco totalmente equilibrato saranno giocate %d partite\n", partitemax*n);
    for (i = 0; i < (partitemax*n); i++) {
        for (j = 0; j < 4; j++) {
            do {
                y = (0 + rand() % n);
                for (k = j; k >= 0; k--) {
                    if ( strcmp(player[y], a[k]) == 0) {
                        estratto = 1;
                        break;
                    }
                    else
                        estratto = 0;
                }
                if (estratto == 0 && partitegiocatori[y] <= (partitemax*4)) {
                    partitegiocatori[y]++;
                    strcpy(a[j], player[y]);
                    flag = 1;
                }
                else {
                    continue;
                }
            } while (flag == 0);
            flag = 0;
        }
        printf("\n %s - %s VS %s - %s", a[0], a[1], a[2], a[3]);
        for (j = 0; j < 4; j++)
                a[j][0] = '\0';
    }
    printf("\n");
    system("PAUSE");
    return 0;
}