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;
}