String printing blank after a while

83 Views Asked by At

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.

1

There are 1 best solutions below

0
On

There are several problems with your code:

  • You increment X in the inner loop, which means it is incremented col*rows times and soon the out-of-bound condition (which you thankfully check) is true. You should reset X every time you increment Y. When you do that, Y is always j + 1 and X is always k + 1. When calculating the position, you "adjust" the values again by subtrracting 1. Get rid of j and k and use Yand X as loop variables and use them directly.

  • You declare DX and DY 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:

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 i, X, Y;
    int dir = 0;

    for (Y = 0; Y < rows; Y++) {
        for (X = 0; X < col; X++) {
            for (dir = 0; dir < DX_SIZE; dir++) {
                char word[20] = { '\0' };

                for (i = 0; i < 19; i++) {
                    int curX = X + DX[dir] * i;
                    int curY = Y + DY[dir] * i;

                    if (curY < 0 || curY >= rows) break;
                    if (curX < 0 || curX >= col) break;

                    word[i] = search[curY][curX];

                    if (i > 2) {
                        int bin = bSearch(word, dictionary, 0, words());

                        if (bin) printf("%s\n", word);
                    }
                }
            }
        }
    }
}