首页 > 解决方案 > 导航 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;
}

标签: c++

解决方案


您在 for 循环中检查短语中每个字母的匹配项。因此,如果一个猜测不匹配,它将错过 10 次,因此它会打印出“错误”。十次。重复字母的正确猜测也会打印出很多“NICE!”。您可能只想在 for 循环之前声明一个 int flag = 0 以设置为 1 以进行正确猜测。在 for 循环之后检查此标志的值,以便打印“错误”。或“不错!” 一次。


推荐阅读