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.
Ha degli errori, ma io mi fermo qui SAREBBE DA RIVEDERE COMPLETAMENTEcodice:#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; }![]()
![]()



Rispondi quotando