So I have to make a word search program for class, and for some parts of it, it works fine, but after a while it stops printing out strings all together. I have zero idea why... any help would be great!
void checkWords(char** search, char** dictionary, int rows, int col){
const int DX_SIZE =8;
const int DX[] = {-1,-1,-1, 0,0, 1,1,1};
const int DY[] = {-1, 0, 1,-1,1,-1,0,1};
int X = 0;
int Y = 0;
int i,j,k;
int dir=0;
int curX = X;
int curY = Y;
for(j=0;j<rows;j++){
Y++;
for(k=0;k<col;k++){
X++;
for(dir=0;dir<DX_SIZE;dir++){
char word[20] = {'\0'};
for(i=0;i<=19;i++){
int curX= ((X+DX[dir]*i)-1);
int curY=((Y+DY[dir]*i)-1);
if(curY>=0&&curY<rows){
if(curX>=0&&curX<col){
word[i]=search[curX][curY];
printf("Stage 7 curX:%d, curY:%d, i:%d dir:%d word:%s\n", curX, curY, i, dir, word);
}
}
int bin=bSearch(word, dictionary, 0, words());
if(bin==1){
// printf("%s\n", word);
}
}
}
}
}
}
Thanks in advanced any one who helps!
EDIT:
here is some sample out put: https://i.stack.imgur.com/7lCjw.jpg the out put is all good up until it starts not printing out word...
EDIT2: 4
4
boat
like
camp
like
Stage 7 curX:0, curY:0, i:0 dir:0 word:b
Stage 7 curX:0, curY:0, i:0 dir:1 word:b
Stage 7 curX:0, curY:0, i:0 dir:2 word:b
Stage 7 curX:0, curY:0, i:0 dir:3 word:b
Stage 7 curX:0, curY:0, i:0 dir:4 word:b
Stage 7 curX:0, curY:1, i:1 dir:4 word:bo
Stage 7 curX:0, curY:2, i:2 dir:4 word:boa
Stage 7 curX:0, curY:3, i:3 dir:4 word:boat
Stage 7 curX:0, curY:0, i:0 dir:5 word:b
Stage 7 curX:0, curY:0, i:0 dir:6 word:b
Stage 7 curX:1, curY:0, i:1 dir:6 word:bl
Stage 7 curX:2, curY:0, i:2 dir:6 word:blc
Stage 7 curX:3, curY:0, i:3 dir:6 word:blcl
Stage 7 curX:0, curY:0, i:0 dir:7 word:b
Stage 7 curX:1, curY:1, i:1 dir:7 word:bi
Stage 7 curX:2, curY:2, i:2 dir:7 word:bim
Stage 7 curX:3, curY:3, i:3 dir:7 word:bime
Stage 7 curX:1, curY:0, i:0 dir:0 word:l
Stage 7 curX:1, curY:0, i:0 dir:1 word:l
Stage 7 curX:0, curY:0, i:1 dir:1 word:lb
Stage 7 curX:1, curY:0, i:0 dir:2 word:l
Stage 7 curX:0, curY:1, i:1 dir:2 word:lo
Stage 7 curX:1, curY:0, i:0 dir:3 word:l
Stage 7 curX:1, curY:0, i:0 dir:4 word:l
Stage 7 curX:1, curY:1, i:1 dir:4 word:li
Stage 7 curX:1, curY:2, i:2 dir:4 word:lik
Stage 7 curX:1, curY:3, i:3 dir:4 word:like
Stage 7 curX:1, curY:0, i:0 dir:5 word:l
Stage 7 curX:1, curY:0, i:0 dir:6 word:l
Stage 7 curX:2, curY:0, i:1 dir:6 word:lc
Stage 7 curX:3, curY:0, i:2 dir:6 word:lcl
Stage 7 curX:1, curY:0, i:0 dir:7 word:l
Stage 7 curX:2, curY:1, i:1 dir:7 word:la
Stage 7 curX:3, curY:2, i:2 dir:7 word:lak
Stage 7 curX:2, curY:0, i:0 dir:0 word:c
Stage 7 curX:2, curY:0, i:0 dir:1 word:c
Stage 7 curX:1, curY:0, i:1 dir:1 word:cl
Stage 7 curX:0, curY:0, i:2 dir:1 word:clb
Stage 7 curX:2, curY:0, i:0 dir:2 word:c
Stage 7 curX:1, curY:1, i:1 dir:2 word:ci
Stage 7 curX:0, curY:2, i:2 dir:2 word:cia
Stage 7 curX:2, curY:0, i:0 dir:3 word:c
Stage 7 curX:2, curY:0, i:0 dir:4 word:c
Stage 7 curX:2, curY:1, i:1 dir:4 word:ca
Stage 7 curX:2, curY:2, i:2 dir:4 word:cam
Stage 7 curX:2, curY:3, i:3 dir:4 word:camp
Stage 7 curX:2, curY:0, i:0 dir:5 word:c
Stage 7 curX:2, curY:0, i:0 dir:6 word:c
Stage 7 curX:3, curY:0, i:1 dir:6 word:cl
Stage 7 curX:2, curY:0, i:0 dir:7 word:c
Stage 7 curX:3, curY:1, i:1 dir:7 word:ci
Stage 7 curX:3, curY:0, i:0 dir:0 word:l
Stage 7 curX:3, curY:0, i:0 dir:1 word:l
Stage 7 curX:2, curY:0, i:1 dir:1 word:lc
Stage 7 curX:1, curY:0, i:2 dir:1 word:lcl
Stage 7 curX:0, curY:0, i:3 dir:1 word:lclb
Stage 7 curX:3, curY:0, i:0 dir:2 word:l
Stage 7 curX:2, curY:1, i:1 dir:2 word:l
Stage 7 curX:1, curY:2, i:2 dir:2 word:lak
Stage 7 curX:0, curY:3, i:3 dir:2 word:lakt
Stage 7 curX:3, curY:0, i:0 dir:3 word:l
Stage 7 curX:3, curY:0, i:0 dir:4 word:l
Stage 7 curX:3, curY:1, i:1 dir:4 word:li
Stage 7 curX:3, curY:2, i:2 dir:4 word:lik
Stage 7 curX:3, curY:3, i:3 dir:4 word:like
Stage 7 curX:3, curY:0, i:0 dir:5 word:l
Stage 7 curX:3, curY:0, i:0 dir:6 word:l
Stage 7 curX:3, curY:0, i:0 dir:7 word:l
Stage 7 curX:3, curY:0, i:1 dir:0 word:
Stage 7 curX:3, curY:1, i:1 dir:1 word:
Stage 7 curX:2, curY:1, i:2 dir:1 word:
Stage 7 curX:1, curY:1, i:3 dir:1 word:
Stage 7 curX:0, curY:1, i:4 dir:1 word:
Stage 7 curX:3, curY:2, i:1 dir:2 word:
Stage 7 curX:2, curY:3, i:2 dir:2 word:
Stage 7 curX:3, curY:1, i:2 dir:1 word:
Stage 7 curX:2, curY:1, i:3 dir:1 word:
Stage 7 curX:1, curY:1, i:4 dir:1 word:
Stage 7 curX:0, curY:1, i:5 dir:1 word:
Stage 7 curX:3, curY:3, i:2 dir:2 word:
Stage 7 curX:3, curY:1, i:3 dir:1 word:
Stage 7 curX:2, curY:1, i:4 dir:1 word:
Stage 7 curX:1, curY:1, i:5 dir:1 word:
Stage 7 curX:0, curY:1, i:6 dir:1 word:
Stage 7 curX:3, curY:1, i:4 dir:1 word:
Stage 7 curX:2, curY:1, i:5 dir:1 word:
Stage 7 curX:1, curY:1, i:6 dir:1 word:
Stage 7 curX:0, curY:1, i:7 dir:1 word:
Stage 7 curX:3, curY:2, i:5 dir:1 word:
Stage 7 curX:2, curY:2, i:6 dir:1 word:
Stage 7 curX:1, curY:2, i:7 dir:1 word:
Stage 7 curX:0, curY:2, i:8 dir:1 word:
Stage 7 curX:3, curY:2, i:6 dir:1 word:
Stage 7 curX:2, curY:2, i:7 dir:1 word:
Stage 7 curX:1, curY:2, i:8 dir:1 word:
Stage 7 curX:0, curY:2, i:9 dir:1 word:
Stage 7 curX:3, curY:2, i:7 dir:1 word:
Stage 7 curX:2, curY:2, i:8 dir:1 word:
Stage 7 curX:1, curY:2, i:9 dir:1 word:
Stage 7 curX:0, curY:2, i:10 dir:1 word:
Stage 7 curX:3, curY:2, i:8 dir:1 word:
Stage 7 curX:2, curY:2, i:9 dir:1 word:
Stage 7 curX:1, curY:2, i:10 dir:1 word:
Stage 7 curX:0, curY:2, i:11 dir:1 word:
Process returned 0 (0x0) execution time : 8.528 s Press any key to continue.
There are several problems with your code:
You increment
X
in the inner loop, which means it is incrementedcol*rows
times and soon the out-of-bound condition (which you thankfully check) is true. You should resetX
every time you incrementY
. When you do that,Y
is alwaysj + 1
andX
is alwaysk + 1
. When calculating the position, you "adjust" the values again by subtrracting 1. Get rid ofj
andk
and useY
andX
as loop variables and use them directly.You declare
DX
andDY
twice. The inner declaration, which is the only active one, shadows the outer one. Get rid of the outer one.Two-dimensional arrays in C are stored with rows as first index and columns as second index. It should be
search[curY][curX]
.You probably want to look up all intermediate words, not only words with 19 letters. Place the binary search in the inner loop.
Not an error, but an observation: Once you go out of bounds, all longer words will be out of bounds, too. You can cut the loop short in that case.
Here's a version that fixes these problems: