Ciao Ragazzi vorrei chiedervi aiuto per 2 questioni sul mio programma, che avvengono sulla funzione
controllo_risultato(); e il suo richiamo all' interno del main :
1) Come mai dopo il Risultato d' AMBO la stringa del vincitore ad es: terno diviene:
il Giocatore NULL ha fatto "RISULTATO es TERNO", così via per tutte le altre vincite;
2) Come mai non mi viene stampato a video, l' avvenimento dell' evento TOMBOLA, quando avviene, ho effettuato anche una prova in cui ho portato a finire i numeri anche sul cartellone vuoto, ma non esegue la stampa della tombola. ecco il codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
#define righe 3
#define colonne 5
#define maxvett 15
#define maxnome 10
#define PEDINE 90 //maxcontr
#define NUM_USERS 5
#define r 9
#define c 10
typedef struct
{
char scheda[righe][colonne];
char nome[maxnome];
bool ambo=false;
bool terno=false;
bool quaterna=false;
bool cinquina=false;
bool tombola=false;
}giocatore;
giocatore m_user[NUM_USERS]; /* uso l' array di struct per identificare l' utente */
void carica_scheda()
{
int i,j,y;
for(i=0;i<NUM_USERS;i++)
{
printf("Inserici il nome del %d giocatore\t",i+1);
gets(m_user[i].nome);
for(j=0;j<righe;j++)
{
for(y=0;y<colonne;y++)
{
m_user[i].scheda[j][y]=0;
}
}
}
system("cls");
}
void inizializza_scheda()
{
int i,col;
for(i=0;i<NUM_USERS;i++)
{
//carico la prima colonna con numeri compresi tra 1 e 9
col=rand()%8+1;
col++;
m_user[i].scheda[0][0]=col;
do
{
col=rand()%8+1;
col++;
}while(col==m_user[i].scheda[0][0]);
m_user[i].scheda[1][0]=col;
do
{
col=rand()%8+1;
col++;
}while(col==m_user[i].scheda[0][0] || col==m_user[i].scheda[1][0]);
m_user[i].scheda[2][0]=col;
//carico la seconda colonna con numeri compresi tra 10 e 29
col=rand()%(29-10)+10;;
col++;
m_user[i].scheda[0][1]=col;
do
{
col=rand()%(29-10)+10;;
col++;
}while(col==m_user[i].scheda[0][1]);
m_user[i].scheda[1][1]=col;
do
{
col=rand()%(29-10)+10;;
col++;
}while(col==m_user[i].scheda[0][1] || col==m_user[i].scheda[1][1]);
m_user[i].scheda[2][1]=col;
//carico la terza colonna con numeri compresi tra 30 e 59
col=rand()%(59-30)+30;
col++;
m_user[i].scheda[0][2]=col;
do
{
col=rand()%(59-30)+30;
col++;
}while(col==m_user[i].scheda[0][2]);
m_user[i].scheda[1][2]=col;
do
{
col=rand()%(59-30)+30;
col++;
}while(col==m_user[i].scheda[0][2] || col==m_user[i].scheda[1][2]);
m_user[i].scheda[2][2]=col;
//carico la quarta colonna con numeri compresi tra 60 e 79
col=rand()%(79-60)+60;
col++;
m_user[i].scheda[0][3]=col;
do
{
col=rand()%(79-60)+60;
col++;
}while(col==m_user[i].scheda[0][3]);
m_user[i].scheda[1][3]=col;
do
{
col=rand()%(79-60)+60;
col++;
}while(col==m_user[i].scheda[0][3] || col==m_user[i].scheda[1][3]);
m_user[i].scheda[2][3]=col;
//carico la quinta colonna con numeri compresi tra 80 e 90
col=rand()%(90-80)+80;
col++;
m_user[i].scheda[0][4]=col;
do
{
col=rand()%(90-80)+80;
col++;
}while(col==m_user[i].scheda[0][4]);
m_user[i].scheda[1][4]=col;
do
{
col=rand()%(90-80)+80;
col++;
}while(col==m_user[i].scheda[0][4] || col==m_user[i].scheda[1][4]);
m_user[i].scheda[2][4]=col;
}
}
int controllo_risultato()
{
//ciclo AMBO
int i,j,y,conta;
for(i=0;i<NUM_USERS;i++)
{
if(m_user[i].ambo==false)
{
conta=0;
for(y=0;y<colonne;y++)
{
if(m_user[i].scheda[0][y]==0)
{
conta++;
}
}
if(conta==2)
{
m_user[i].ambo==true;
printf("Il giocatore %s ha fatto AMBO\n",m_user[i].nome);
}
conta=0;
for(y=0;y<colonne;y++)
{
if(m_user[i].scheda[1][y]==0)
{
conta++;
}
}
if(conta==2)
{
m_user[i].ambo==true;
printf("Il giocatore %s ha fatto AMBO\n",m_user[i].nome);
}
conta=0;
for(y=0;y<colonne;y++)
{
if(m_user[i].scheda[2][y]==0)
{
conta++;
}
}
if(conta==2)
{
m_user[i].ambo==true;
printf("Il giocatore %s ha fatto AMBO\n",m_user[i].nome);
}
}
}
//ciclo TERNO
for(i=0;i<NUM_USERS;i++)
{
if(m_user[i].terno==false)
{
conta=0;
for(y=0;y<colonne;y++)
{
if(m_user[i].scheda[0][y]==0)
{
conta++;
}
}
if(conta==3)
{
m_user[i].terno==true;
printf("Il giocatore %s ha fatto TERNO\n",m_user[i].terno);
}
conta=0;
for(y=0;y<colonne;y++)
{
if(m_user[i].scheda[1][y]==0)
{
conta++;
}
}
if(conta==3)
{
m_user[i].terno==true;
printf("Il giocatore %s ha fatto TERNO\n",m_user[i].terno);
}
conta=0;
for(y=0;y<colonne;y++)
{
if(m_user[i].scheda[2][y]==0)
{
conta++;
}
}
if(conta==3)
{
m_user[i].terno==true;
printf("Il giocatore %s ha fatto TERNO\n",m_user[i].terno);
}
}
}
//ciclo QUATERNA
for(i=0;i<NUM_USERS;i++)
{
if(m_user[i].quaterna==false)
{
conta=0;
for(y=0;y<colonne;y++)
{
if(m_user[i].scheda[0][y]==0)
{
conta++;
}
}
if(conta==4)
{
m_user[i].quaterna==true;
printf("Il giocatore %s ha fatto QUATERNA\n",m_user[i].quaterna);
}
conta=0;
for(y=0;y<colonne;y++)
{
if(m_user[i].scheda[1][y]==0)
{
conta++;
}
}
if(conta==4)
{
m_user[i].quaterna==true;
printf("Il giocatore %s ha fatto QUATERNA\n",m_user[i].quaterna);
}
conta=0;
for(y=0;y<colonne;y++)
{
if(m_user[i].scheda[2][y]==0)
{
conta++;
}
}
if(conta==4)
{
m_user[i].quaterna==true;
printf("Il giocatore %s ha fatto QUATERNA\n",m_user[i].quaterna);
}
}
}
//ciclo CINQUINA
for(i=0;i<NUM_USERS;i++)
{
if(m_user[i].cinquina==false)
{
conta=0;
for(y=0;y<colonne;y++)
{
if(m_user[i].scheda[0][y]==0)
{
conta++;
}
}
if(conta==5)
{
m_user[i].cinquina==true;
printf("Il giocatore %s ha fatto CINQUINA\n",m_user[i].cinquina);
}
conta=0;
for(y=0;y<colonne;y++)
{
if(m_user[i].scheda[1][y]==0)
{
conta++;
}
}
if(conta==5)
{
m_user[i].cinquina==true;
printf("Il giocatore %s ha fatto CINQUINA\n",m_user[i].cinquina);
}
conta=0;
for(y=0;y<colonne;y++)
{
if(m_user[i].scheda[2][y]==0)
{
conta++;
}
}
if(conta==5)
{
m_user[i].cinquina==true;
printf("Il giocatore %s ha fatto CINQUINA\n",m_user[i].cinquina);
}
}
}
//ciclo TOMBOLA
for(i=0;i<NUM_USERS;i++)
{
if(m_user[i].cinquina==true && m_user[i].tombola==false)
{
conta=0;
for(j=0;j<righe;j++)
{
for(y=0;y<colonne;y++)
{
if(m_user[i].scheda[j][y]==0)
{
conta++;
}
}
}
if(conta==maxvett)
{
m_user[i].tombola==true;
return i;
}
}
}
}
void stampa_scheda()
{
int i,y,j;
for(i=0;i<NUM_USERS;i++)
{
printf("la scheda di %s e':\n",m_user[i].nome);
for(j=0;j<righe;j++)
{
for(y=0;y<colonne;y++)
{
printf("%d\t",m_user[i].scheda[j][y]);
}
printf("\n");
}
printf("\n");
}
}
void tombola_stampa()
{
printf("TOMBOLA\n");
//serie di solo testo in printf
}
int main()
{
int i,y,j,x,z=0,num,estratto,scelta,col,ind_vincitore=0; //y=c
int tabella[r][c];
int vett[maxvett];
int controllo[PEDINE];
bool trovato=false;
bool giauscito=false;
carica_scheda();
//INIZIO CARICAMENTO DELLA MATRICE DEI GIOCATORI
inizializza_scheda();
//CARICO IL TABELLONE CON I NUMERI DA 1 A 90
num=1;
for (i=0; i<9; i++)
{
for (j=0; j<10; j++)
{
tabella[i][j]=num;
num++;
}
}
do
{
bool giauscito=false;
bool entrato=false;
srand(time(NULL));
//imposto il vettore di controllo a 0
for(x=0; x<PEDINE; x++)
{
controllo[x]=0;
}
//STAMPO LE CARTELLE
stampa_scheda();
estratto=0;
//INIZIO GIOCO
do
{
system ("cls");
//sostituisco con uno 0 i numeri gia usciti
for(i=0;i<NUM_USERS;i++)
{
for(j=0;j<righe;j++)
{
for(y=0;y<colonne;y++)
{
if(m_user[i].scheda[j][y]==estratto)
{
m_user[i].scheda[j][y]==estratto;
}
}
}
}
ind_vincitore=controllo_risultato();
if(ind_vincitore!=0)
{
printf("Il Giocatore %s ha fatto \n\n",m_user[ind_vincitore]);
m_user[ind_vincitore].tombola=true;
tombola_stampa();
}
//STAMPO LE CARTELLE
stampa_scheda();
//STAMPO LA TABELLA
printf("TABELLA: \n\n");
for (j=0; j<r; j++)
{
for (y=0; y<c; y++)
{
printf("%d",tabella[j][y]);
printf("\t");
}
printf("\n");
}
system("pause");
printf("\n\n");
printf("Estrazione");
for(i=0;i<3;i++)
{
Sleep(100);
printf(".");
}
//controllo sull'estrazione
do
{
giauscito=true;
estratto=rand()%90+1;
for (j=0; j<r; j++)
{
for (y=0; y<c; y++)
{
if (tabella[j][y]==estratto)
{
giauscito=false;
}
}
}
}while(giauscito==true);
printf("\n");
printf("Numero estratto: %d\n\n\n",estratto);
system ("pause");
//sostituisco con un 0 i numeri gia estratti
for (j=0; j<r; j++)
{
for (y=0; y<c; y++)
{
if(tabella[j][y]==estratto)
{
tabella[j][y]=0;
}
}
}
for(i=0;i<NUM_USERS;i++)
{
for(j=0;j<righe;j++)
{
for(y=0;y<colonne;y++)
{
if(m_user[i].scheda[j][y]==estratto)
{
m_user[i].scheda[j][y]=0;
}
}
}
}
}while(m_user[ind_vincitore].tombola==true);
printf("Vuoi estrarre un numero 1 per SI altro valore per NO:\t");
scanf("%d",&scelta);
}while(scelta==1 || m_user[ind_vincitore].tombola==true);
}