![]() |
|
|
|
Thread Tools | Display Modes |
|
|
|
|
#11 |
|
Hobbyist Programmer
Join Date: Nov 2006
Posts: 111
Rep Power: 2
![]() |
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. |
|
|
|