我有一个错误,我找不到通过谷歌搜索修复。我正在尝试制作游戏Mastermind的基于文本的版本。我正在使用一个字符串,它是从一个字符数组中设置的,作为while
循环的标准。当字符串等于“****”时,游戏应该告诉玩家他们赢了并退出,但由于某种原因,^ A被添加到正在检查的字符串的末尾,即使它不在char数组中。
这是设置char数组并从该数组中返回字符串的函数:
string check(int guess[4], int num[4]) {
char hints[4];
cout << " ";
for (int i = 0; i < 4; i++) {
if (guess[i] == num[i]) {
hints[i] = '*';
cout << "*";
}
else {
for (int x = 0; x < 4; x++) {
if (guess[i] == num[x]) {
cout << "+";
}
}
}
if (guess[i] != num[i]) {
hints[i] = ' ';
}
}
string hint(hints);
cout << endl;
cout << hint << endl;
return hint;
}
这是检查字符串值的函数:
while (hints.compare("****") != 0) {
if (guessCount == 5) {
break;
}
cout << "Guess?: ";
cin >> guess;
intToArray(guess, guessArr);
hints = check(guessArr, nums);
cout << hints << endl;
guessCount++;
}
if (hints.compare("****") == 0) {
cout << "You win! The number was: ";
for (int i = 0; i < 4; i++) {
cout << nums[i];
}
}
答案 0 :(得分:4)
你没有空终止hints
数组,所以你的字符串堆栈中会有额外的垃圾。
您可以让hint
字符串知道构建它时的长度。
string hint(hints, 4);
cout << endl;
cout << hint << endl;