Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/forums/c/)
-   -   BINGO game problem (http://www.go4expert.com/forums/bingo-game-problem-t19081/)

jarkeethan 18Aug2009 11:27

BINGO game problem
 
this a binggo game but im stuck with checking the numbers in the loop.
i need an output that display a different random numbers without repeating any number.
i made a checking function but I'm not sure if it is applicable to this program.:crazy:
can anyone help me with this program,:surrender

Code: c++

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
int x[5][5];
int CheckIfExist(int num)
{
int flag = 0, i, j;
for (i=0;i<5;i++)
for(j=0;j<5;j++)
if (x[i][j]==num) {
flag = 1;
break;
}
return flag;
}

main()
{
int xx, ctr=0, b=0, i=0, n=0, g=0, o=0, w, q;
clrscr();

for(;;) {
xx=random(75)+1;
if(CheckIfExist(xx)==0) {
if (xx>=1 && xx<16) {
x[0][b]=xx;
b++;
ctr++;
}
if (xx>=16 && xx<31) {
x[1][i]=xx;
i++;
ctr++;
}
if (xx>=31 && xx<46) {
x[2][n]=xx;
n++;
ctr++;
}
if (xx>=46 && xx<61) {
x[3][g]=xx;
g++;
ctr++;
}
if (xx>=61 && xx<76) {
x[4][o]=xx;
o++;
ctr++;
}
}
if(ctr>24)
break;
}

for(w=0;w<5;w++)
for(q=0;q<5;q++) {
gotoxy((w*3)+1,q+1);
printf("%d",x[w][q]);
}

getch();
return 0;
}


xpi0t0s 18Aug2009 12:27

Re: BINGO game problem
 
Please use code blocks when posting code; it makes code much easier to read.

Looking through it though, it seems mostly OK. What does the program not do that you want?

The only fault I could see with the code (without running it) is that you need to check that b,i,n,g,o don't exceed 4; once you've written to, for example, x[0][4], next time you get a number between 1 and 16 you should do nothing, otherwise you'll write to x[0][5] which will cause undefined behaviour.

CheckIfExist() seems fine though. Why do you think it might not apply to this program? If you're going to eliminate duplicates you're going to need a mechanism of some kind to do that.

jarkeethan 19Aug2009 04:59

Re: BINGO game problem
 
i try to use CheckIfExist() for checking that there is no duplicate no. in b,i,n,g,o but it always display a same number and also display 0...i want the get different numbers without repeating any number..

xpi0t0s 19Aug2009 11:39

Re: BINGO game problem
 
The reason for the zeroes is that you keep overflowing the end of the arrays. You aren't guaranteed anything about random numbers, that's the point, and you aren't guaranteed to get just as many numbers from 1 to 16 as you are in any other range, which your code assumes to be the case. So one or more of b,i,n,g,o are exceeding 4 and writing somewhere else in memory, which is a UB bug. This also means ctr reaches 24 before all numbers are filled in, hence the zeroes.

So what you need to do as I already said is to add a check for each of b,i,n,g,o and do nothing if it's greater than 4, e.g.
Code:

                        if (xx>=1 && xx<16 && b<5)
                        {
                                x[0][b]=xx;
                                b++;
                                ctr++;
                        }

With this change the code ran fine in Visual Studio 2008 and I got no duplicates or zeroes.


All times are GMT +5.5. The time now is 07:55.