Problema di overflow

di il
5 risposte

Problema di overflow

Chi mi aiuta con questo problema di overflow?? ecco il codice, avvio il programma avviene la prima estrazione ma poi mi va in overfolw

#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
#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,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 carica_tabellone()
{
	}

void carica_colonne()
{
	int i,col,j,y;
	
	//INIZIO CARICAMENTO DELLA MATRICE DEi GIOCATORI
	
	for(i=0;i<NUM_USERS;i++)
	{
	
		for(j=0;j<righe;j++)
		{
		
			for(y=0;y<colonne;y++)
			{
				if(y==0)	//carico la prima colonna con numeri compresi tra 1 e 9
				{
					col=rand()%8+1;
					col++;
					m_user[i].scheda[j][y]=col;	
				}
				if(y==1) 
				{
					col=rand()%(29-10)+10;	//carico la seconda colonna con numeri compresi tra 10 e 29
					col++;
					m_user[i].scheda[j][y]=col;	
				}
				if(y==2) 
				{
					col=rand()%(59-30)+30;	//carico la terza colonna con numeri compresi tra 30 e 59
					col++;
					m_user[i].scheda[j][y]=col;	
				}
				if(y==3) 
				{
					col=rand()%(79-60)+60;	//carico la quarta colonna con numeri compresi tra 60 e 79
					col++;
					m_user[i].scheda[j][y]=col;	
				}
				if(y==4) 
				{
					col=rand()%(90-80)+80;	//carico la quinta colonna con numeri compresi tra 80 e 90
					col++;
					m_user[i].scheda[j][y]=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(j=0;j<righe;j++)
			{
				for(y=0;y<colonne;y++)
				{
					if(m_user[i].scheda[j][y]==0)
					{
						conta++;
					}
				}
			}
			if(conta==2)
			{
				m_user[i].ambo==true;
				printf("Il giocatore %s ha fatto AMBO\n",m_user[i].ambo);
			}	
		}
	}
	
	//ciclo TERNO
	
	for(i=0;i<NUM_USERS;i++)
	{
		if(m_user[i].ambo==true && m_user[i].terno==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==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].ambo==true && m_user[i].terno==true && m_user[i].quaterna==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==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].ambo==true && m_user[i].terno==true && m_user[i].quaterna==true && m_user[i].cinquina==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==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].ambo==true && m_user[i].terno==true && m_user[i].quaterna==true && 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;
			}	
		}
	}
}

int main()
{
	carica_scheda();
	carica_colonne();
	inizializza_scheda();
	carica_tabellone();
	printf("\n");
	
	int i,y,x,j,scelta,num,estratto,conta;
	int risultato=0;
	int vett[maxvett];
	int controllo[PEDINE];
	int ind_tomb;
	bool giauscito=false;
	int tabella[r][c];

	srand(time(NULL));
	
	//imposto il vettore di controllo a 0
	
	num=1;
	
	//carico TABLELLONE
	for (i=0; i<r; i++)
	{
		for (j=0; j<c; j++)
		{
			tabella[i][j]=num;
			num++;
		}
	}
	
	printf("TABELLA: \n\n");
	//stampo il TABELLONE
	for (i=0; i<r; i++)
	{
		for (j=0; j<c; j++)
		{
			printf("%d",tabella[i][j]);
			printf("\t");
		}
		printf("\n");
	}

	for(x=0; x<=PEDINE; x++)
	{
		controllo[x]=0;
	}
	
	estratto=0;
	
	//INIZIO GIOCO
	
	do
	{
	
		//sostituisco con uno 0 i numeri gia usciti
		
		printf("Vuoi Estrarre un numero 1 per SI altro valore per NO:\t");
		scanf("%d",&scelta);
		if(scelta==1)
		{
			ind_tomb=controllo_risultato();
			if(ind_tomb==1)
			{	
				printf("Il giocatore %s ha fatto TOMBOLA",m_user[ind_tomb].nome);
			}
			printf("Estrazione");
	
			for(i=0;i<3;i++)
			{
				Sleep(400); 
				printf(".");
			}
			//controllo sull'estrazione
	
			do
			{
				giauscito=true;
				estratto=rand()%90+1;
		
				for(i=0;i<r;i++)
				{
					for(j=0;j<c;j++)
					{
						if(tabella[i][j]==estratto)
						{
							giauscito=false;
						}
					}
				}
			}while(giauscito==true);
			
			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;
						}
					}
				}
			}
			printf("\n");
			printf("Numero estratto: %d\n\n\n",estratto);
	
			system ("pause");
			
			system("CLS");
			
				//sostituisco con un 0 i numeri gia estratti
	
			for (i=0; i<r; i++)
			{
				for (j=0; j<c; j++)
				{
					if(tabella[i][j]==estratto)
					{
						tabella[i][j]=0;
					}		
				}
			}
	
			for(i=0; i<NUM_USERS;i++)
			{
				for(j=0;j<righe;j++)
				{
					for(y=0;j<colonne;y++)
					{
						if(m_user[i].scheda[j][y]==estratto)
						{
							m_user[i].scheda[j][y]=0;
						}
					}
				}
			}
			//sostituisco con un 0 i numeri gia estratti
	
			for (i=0; i<r; i++)
			{
				for (j=0; j<c; j++)
				{
					if(tabella[i][j]==estratto)
					{
						tabella[i][j]=0;
					}		
				}
			}
	
			for(i=0; i<NUM_USERS;i++)
			{
				for(j=0;j<righe;j++)
				{
					for(y=0;j<colonne;y++)
					{
						if(m_user[i].scheda[j][y]==estratto)
						{
							m_user[i].scheda[j][y]=0;
						}
					}
				}
			}
			inizializza_scheda();
			carica_tabellone();
		}
	}while(scelta==1);	

	system("PAUSE");
	return 0;
}

5 Risposte

  • Re: Problema di overflow

    Devi sempre indicare in quale linea avviene l'errore. Impara ad usare il debugger.
  • Re: Problema di overflow

    Penso sia sulla linea del do while del controllo sull estrazione
  • Re: Problema di overflow

    Pensi?

    Devi eseguire con il debugger ...

    Comunque, controlla le variabili degli ultimi for perché non mi sembrano corrette ...
  • Re: Problema di overflow

    Non lo so fare, cortesemente mi poi aiutare tu?
  • Re: Problema di overflow

    Ti ho detto di controllare le variabili delle ultime for. Lo hai fatto?
Devi accedere o registrarti per scrivere nel forum
5 risposte