NON QUOTARE sempre perch� non � necessario e rende meno leggibile
1) Premetto che sono un autodidatta in linguaggio C, quindi non sono certo l'insegnante migliore.
Ma il C non � il C++, le variabili e gli array, dovrebbero essere dichiarate a inizio programma per le variabili globali, e a inizio funzione per le variabili locali.
Le dimensioni degli array devono essere costanti e non variabili.
Tu dichiari le variabili in ogni posto e quando ti servono, molti compilatori ti darebbero errore, non vanno dichiarate all'interno di un ciclo perch� a ogni ciclo verrebbero "ricreate" e tu lo fai.
Ho provato a compilare, e a parte gli errori che ti ho detto, � l'algoritmo che non � corretto
Questa parte del codice che serve per vedere se nei 4 giocatori � stato gi� estratto il nome
non funziona molto bene
codice:
for(k =0; k <4; k++){//Verifica che non sia ripetuto nei 4 giocatori
if(K!=J && strcmp(a[k], a[j])==0){
estratto=1;
break;
}
else
estratto=0;
}
Questo � il programma con le variabili dichiarate a inizio funzione, e le dimensioni array costani.
Ora � lo stesso un po incasinato, funziona in parte per il problema del codice sopra postato.
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];
short 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 = 0; k < 4; k++) {
if ( strcmp(player[y], a[k]) == 0) {
estratto = 1;
break;
}
else
estratto = 0;
}
if (estratto == 0 && partitegiocatori[y] < partitemax) {
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';
}
getchar();
return 0;
}
Ha degli errori, ma io mi fermo qui SAREBBE DA RIVEDERE COMPLETAMENTE