c++ - 导航 while 循环
问题描述
我正在制作一种刽子手类型的游戏,除了在玩家没有猜到短语中的字母时出现一条消息外,它的运行非常好。如果他们猜到了短语中的数字,“nice”这个短语就会正常显示。但是,使用错误的字母,它只会打印 10 次“错误”(这是我在 while 循环中设置的)。
我想了解为什么会发生这种情况。我有 while 循环设置继续,直到未命中数达到 10,或者该短语完成。但是由于我给玩家的消息是在 while 循环中的 for 循环中,为什么它仍然打印多次?
我怀疑这是一个范围问题(显然),但我无法理解为什么“正确”的打印工作有效,但“错误的”打印了 10 次。这是代码:
#include <iostream>
#include <cstdlib>
#include <vector>
#include "ufo_functions.hpp"
using namespace std;
int main() {
string phrase = "spicyonion";
string dashes = "----------";
char guess;
int misses = 0;
greet();
cout<<dashes<<"\n";
while (misses < 10 && dashes != phrase) {
display_misses(misses);
cout<<"What is your guess? Enter here: ";
cin>>guess;
for (int i=0; i<phrase.length(); i++) {
if (guess == phrase[i]) {
cout<<"Nice!\n";
dashes[i] = guess;
} else {
cout<<"WRONG.\n";
misses++;
}
}
cout<<dashes<<"\n";
}
end_game(phrase, dashes);
return 0;
}
解决方案
您在 for 循环中检查短语中每个字母的匹配项。因此,如果一个猜测不匹配,它将错过 10 次,因此它会打印出“错误”。十次。重复字母的正确猜测也会打印出很多“NICE!”。您可能只想在 for 循环之前声明一个 int flag = 0 以设置为 1 以进行正确猜测。在 for 循环之后检查此标志的值,以便打印“错误”。或“不错!” 一次。
推荐阅读
- centos - mount - 在 fstab 错误中找不到 /dev/sdc
- excel - VBA复制范围并粘贴到另一个工作表
- python - 使用在views.py中存在的方法中传递的变量检查signals.py中的条件 - django
- activiti - 将外部授权插入camunda
- java - 保存子对象和已保存父对象时出现 TransientObjectException
- android - 如何在一个进程中从 url 下载多个图像?
- android - Android:是否可以在时间选择器中仅显示 Quaters?00:15:30:45
- sql-server - 带有日期参数的删除触发器的 SQL Server 语法
- c++ - Windbg "!locks" 命令不起作用,我还能获取信息吗?
- reactjs - 如何在父类组件中获取子类组件的DOM ref