Programming Forums
User Name Password Register
 

RSS Feed
FORUM INDEX | TODAY'S POSTS | UNANSWERED THREADS | ADVANCED SEARCH

 
 
Thread Tools Display Modes
Prev Previous Post in Thread   Next Post in Thread Next
Old Nov 15th, 2006, 6:18 PM   #11
aznballerlee
Hobbyist Programmer
 
Join Date: Nov 2006
Posts: 111
Rep Power: 2 aznballerlee is on a distinguished road
I did fix that error after reading the post. Thanks!
But I do have another problem:

I get the correct probe (probe match secret word) but I don't get the correct (You got it in ___ probes). I keep getting '1', which means my for loop that causes that output doesn't update properly.

Here is my current code:

#define _CRT_SECURE_NO_DEPRECATE
#include <iostream>
#include <fstream>
#include <cstring>
#include <cctype>
#include <cstdlib>
#include <ctime>
 
using namespace std;

const int MAXWORDS = 8000;
const int MAXWORDLENGTH = 6;
const int MINWORDLENGTH = 4;
int nWords;
 
void fillWords(char words[][MAXWORDLENGTH + 1], int maxwords, int& num);
int playOneRound (int wordnum);
void correct (int i);
 
char wordList [MAXWORDS][MAXWORDLENGTH + 1];

 // fills the wordList array
void fillWords(char words[][MAXWORDLENGTH+1], int MAXWORDS, int& num)  
{
    ifstream wordfile("C:/words.txt"); 
    if ( ! wordfile)
     {
        cout << "Cannot open words.txt!" << endl;
         exit(1);
    }
     char line[10000];
    num = 0;
     while (wordfile.getline(line, 10000))
    {
         if (num == MAXWORDS)
        {
             cout << "Using only the first " << num
                 << " words from words.txt" << endl;
            break;
         }
        int k;
         for (k = 0; islower(line[k]); k++)
            ;
         if (line[k] == '\0'  &&  k >= MINWORDLENGTH  &&  k <= MAXWORDLENGTH)
         {
            strcpy(words[num], line);
             num++;
        }
     }
}

 int myRand(int myLimit)
{
     return std::rand() % myLimit;
}

 
// choose a secret word
 // check to see if secret word is in wordList
// if in, type in a guess
 // count the number of correct characters in guess
int playOneRound (int wordnum) 
{                                                                           
     char guess[MAXWORDLENGTH+1];
    int i;
     int h;
    do
     {
        cout << "Probe: ";
         cin >> guess;

         for (int b=0; b < strlen(guess); b++)
        {
             if (isupper(guess[b]))
                cout << "Your probe must be a word of 4 to 6 lower case letters" << endl; 
            break;
         }

        for (i=1; i < MAXWORDS; i++)                          // i is the number of probes we're on
        {
             if (strcmp (wordList[wordnum], guess) == 0)         // if probe is correct
             {    
                correct(i);
                 break;
            }
             else                                                  
            {    
                 for (h=0; h < MAXWORDS; h++)
                { 
                    if ( strcmp (wordList[h], guess) == 0 )        
                     {    
                        int numCorrect = 0;                               
                        bool boolArray [MAXWORDLENGTH] = {false};       
                         for (int z=0; z < MAXWORDLENGTH; z++)            
                         {
                            for (int j=0; j < MAXWORDLENGTH; j++)      
                             {
   if ((guess[z] == wordList[wordnum][j]) && (boolArray[j] == false)
                                    && (guess[z] != '\0'))    
                                {    
                                     boolArray [j] = true;
                                    break;                  
                                }                            
                             }
                        }
                         for (int a=0; a < MAXWORDLENGTH; a++)
                        { 
                            if ( boolArray [a])
                                 numCorrect++;
                        }
                         cout << numCorrect << endl;
                        break; 
                    }
                 }    

                if ( strcmp (wordList[h], guess) != 0 )        

                   cout << "I don't know that word" << endl;    
                  break; 


             }

         }

    } while (strcmp (wordList[wordnum], guess) != 0); 
    return i;
 }        

void correct (int i)
 {
    cout << "You got it in " << i << " probes" << endl; 
} 


int main ()
 {
    fillWords (wordList, MAXWORDS, nWords);
 
    int rounds;
    cout << "How many rounds do you want to play? "; 
    cin >> rounds;

     if (rounds < 0)
    {    
         cout << "Number of rounds must be positive" << endl;
         exit (1);
    }

     for (int a=1; a < rounds+1; a++)
    {
         cout << "Round " << a << endl;
         int random = myRand(10);
        int length = strlen(wordList[random]);
         cout << "The secret word is " << length << " letters long" << endl;
         int result = playOneRound (random);

     }

    return 0; 
}

Pretty much the i in the for loop doesn't iterate .. so I keep getting stuck with the same 'i' when I run the void function .. and therefore it keeps giving me '1 probes' no matter what.

There's probably a problem inside the for loop that causes this .. but I can't seem to fine it .. I hope this code isn't too hard to read.
aznballerlee is offline   Reply With Quote