过去两天我一直试图修复这个程序,事实证明这很麻烦。这是我对C ++课程的介绍,并给了我一些麻烦。我在Cplusplus.com上发布了这个主板,并在Google上花了几个小时寻找帮助。
这是我的问题。我得到了一个程序,需要添加一些功能:
好像很简单?不适合像我这样的初学者。这是代码,我试图添加它以满足问题的要求。
int main()
{
//declare variables
string origWord = "";
string letter = "";
char dashReplaced = 'N';
char gameOver = 'N';
int numIncorrect = 0;
string displayWord = "-----";
string letterGuess[26];
//get original word
do //begin loop
{
cout << "Enter a 5-letter word in uppercase: ";
getline(cin, origWord);
} while (origWord.length() != 5);
//clear the screen
system("cls");
//start guessing
cout << "Guess this word: " <<
displayWord << endl;
while (gameOver == 'N')
{
cout << "Enter an uppercase letter: ";
cin >> letter;
//Entry Storage and Error Message. This is my problem.
for (int x = 0; x < 26; x++)
{
letterGuess[x] = letter;
for (int i = x; i < 26; i++)
{
if (i != x)
{
if (letterGuess[x] == letterGuess[i])
{
cout << "Letter already entered. Choose another letter."
<< endl;
}
}
}
}
//search for the letter in the original word
for (int x = 0; x < 5; x += 1)
{
//if the current character matches
//the letter, replace the corresponding
//dash in the displayWord variable and then
//set the dashReplaced variable to 'Y'
if (origWord.substr(x, 1) == letter)
{
displayWord.replace(x, 1, letter);
dashReplaced = 'Y';
} //end if
} //end for
//if a dash was replaced, check whether the
//displayWord variable contains any dashes
if (dashReplaced == 'Y')
{
//if the displayWord variable does not
//contain any dashes, the game is over
if (displayWord.find("-", 0) == -1)
{
gameOver = 'Y';
cout << endl << "Yes, the word is "
<< origWord << endl;
cout << "Great guessing!" << endl;
}
else //otherwise, continue guessing
{
cout << endl << "Guess this word: "
<< displayWord << endl;
dashReplaced = 'N';
} //end if
}
else //processed when dashReplaced contains 'N'
{
//add 1 to the number of incorrect guesses
numIncorrect += 1;
//if the number of incorrect guesses is 10,
//the game is over
if (numIncorrect == 10)
{
gameOver = 'Y';
cout << endl << "Sorry, the word is "
<< origWord << endl;
} //end if
} //end if
} //end while
system("pause");
return 0;
} //end of main function
我对程序的唯一编辑直接位于条目存储和错误消息的标题下。我尝试了一个for循环,但是只显示输入的每个字母的错误消息。不仅如此,它还显示了26次。添加一个Break命令修复了它,它只显示一次。但是,它仍会显示在每个条目上。
Cplusplus的一名成员指出,我错误地在同一位置对阵列测试相同的变量。这就是它在每个条目上显示错误的原因。现在使用此循环,仅在输入两次条目时才会显示错误。但是,错误消息再次显示26次。最重要的是,只有一个接一个地输入字母才会出错。
例如,如果我再次输入A然后是X然后输入A,则不会显示错误。如果我再次输入A,然后再输入A,则错误显示26次。在导致错误消息多次显示的任何内容之外,字母变量如何输入到数组中显然是错误的。
非常感谢任何数量的帮助。
编辑:我的教授已经回复我并建议使用以下内容而不是我一直在修补的内容:
for (int x=0; x<5; x++)
if (origWord[x] == letterEntered)
origWord[x] = '-';
这只是我,还是完全错过了这个标记?我没有尝试将其转换为我的程序,因为简单的复制和粘贴作业会产生编译错误。但是,我不知道这对我正在尝试做什么有什么用。
答案 0 :(得分:1)
此设置是letterGuess
数组中最近猜到的字母的所有条目。
letterGuess[x] = letter;
这不是你想要的。
您需要考虑需要实施的实际算法:
如果您已经了解了标准容器,可以使用已排序的std::set
或std::vector
轻松完成此操作。
答案 1 :(得分:0)
您需要将数组中的每个元素与猜测的单词进行比较。最好使用for循环。如果这是一项任务,就不再需要说了。
也不要在你的程序中使用system("cls")
,这是一个巨大的安全漏洞,可能会失去你的标记。