Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
似乎在中断while循环(c+;+;)后不再执行代码 我学习C++并创建一个小型RPG游戏。_C++_While Loop_Break - Fatal编程技术网

似乎在中断while循环(c+;+;)后不再执行代码 我学习C++并创建一个小型RPG游戏。

似乎在中断while循环(c+;+;)后不再执行代码 我学习C++并创建一个小型RPG游戏。,c++,while-loop,break,C++,While Loop,Break,我有一个函数来给出初始统计点,但是一旦所有的点都被添加,我似乎就无法打破while循环并在循环后执行cout。请注意,所有技能名称和字符名称都是向前声明的,并且技能名称都是全文输入的。剩余的积分也会向前声明。所有操作都将继续正确执行。也没有编译器错误 void CharacterSkillSetup() { std::string SelectedSkill; int AssignedPoints; while(SelectedSkill != "Muscle" ||

我有一个函数来给出初始统计点,但是一旦所有的点都被添加,我似乎就无法打破while循环并在循环后执行cout。请注意,所有技能名称和字符名称都是向前声明的,并且技能名称都是全文输入的。剩余的积分也会向前声明。所有操作都将继续正确执行。也没有编译器错误

void CharacterSkillSetup()
{
    std::string SelectedSkill;
    int AssignedPoints;

    while(SelectedSkill != "Muscle" || SelectedSkill != "Focus"
        || SelectedSkill != "Reflexes" || SelectedSkill != "Cogni"
        || SelectedSkill != "Precision" || SelectedSkill != "Resistance"
        || SelectedSkill != "Luck" || SelectedSkill != "Finished")

    {
        std::cout << "\nWell then " << CharacterName
            << ", you seem like you have the capacity for a bit of training. \n \n";
        std::cout << "You can train in the following skills: \n";
        std::cout << "Muscle " << MuscleSkill << " - Increase Physical and Ranged damage. \n";
        std::cout << "Focus " << FocusSkill << " - Increase Magical damage. \n";
        std::cout << "Reflexes " << ReflexesSkill << " - Increase Physical and Ranged speed. \n";
        std::cout << "Cogni " << CogniSkill << " - Increase Magical speed. \n";
        std::cout << "Precision " << PrecisionSkill << " - Increase hit chance. \n";
        std::cout << "Resistance " << ResistanceSkill
            << " - Increase hitpoints and lessen damage received. \n";
        std::cout << "Luck " << LuckSkill << " - Increase value of loot drops. \n \n";
        std::cout << "You currently have " << RemainingPoints << " skillpoints to assign. \n \n";
        std::cout <<
            "Please type the full name of the skill followed by how many points you wish \nto assign to it.\n";
        std::cout << "\nIf you wish to assign some skillpoints at a later time type 'Finished 0'\n";
        std::cin >> SelectedSkill >> AssignedPoints;
        if(std::cin.fail())
        {
            std::cin.clear();
        }

        if(AssignedPoints > 14 || AssignedPoints < 0 || (RemainingPoints - AssignedPoints < 0))
        {
            AssignedPoints = 0;
        }

        if(SelectedSkill == "Muscle")
        {
            MuscleSkill = MuscleSkill + AssignedPoints;
            RemainingPoints = RemainingPoints - AssignedPoints;
        }

        else if(SelectedSkill == "Focus")
        {
            FocusSkill = AssignedPoints + FocusSkill;
            RemainingPoints = RemainingPoints - AssignedPoints;
        }

        else if(SelectedSkill == "Reflexes")
        {
            ReflexesSkill = AssignedPoints + ReflexesSkill;
            RemainingPoints = RemainingPoints - AssignedPoints;
        }

        else if(SelectedSkill == "Cogni")
        {
            CogniSkill = AssignedPoints + CogniSkill;
            RemainingPoints = RemainingPoints - AssignedPoints;
        }

        else if(SelectedSkill == "Precision")
        {
            PrecisionSkill = AssignedPoints + PrecisionSkill;
            RemainingPoints = RemainingPoints - AssignedPoints;
        }

        else if(SelectedSkill == "Resistance")
        {
            ResistanceSkill = AssignedPoints + ResistanceSkill;
            RemainingPoints = RemainingPoints - AssignedPoints;
        }

        else if(SelectedSkill == "Luck")
        {
            LuckSkill = AssignedPoints + LuckSkill;
            RemainingPoints = RemainingPoints - AssignedPoints;
        }

        else if(SelectedSkill == "Finished")
        {
            std::string Choice;

            std::cout << "Are you sure you're finished adding points? \n";
            std::cin >> Choice;

            if(Choice == "Yes")
            {
                break;
            }
            else if(Choice == "No")
            {
                continue;
            }
        }

        if(RemainingPoints = 0)
        {
            break;
        }
    }

    std::cout << "Loop finished";
}
void CharacterSkillSetup()
{
std::字符串选择技能;
int分配点;
while(SelectedSkill!=“Muscle”| | SelectedSkill!=“Focus”
||SelectedSkill!=“反射”| | SelectedSkill!=“Cogni”
||SelectedSkill!=“精度”| | SelectedSkill!=“阻力”
||SelectedSkill!=“运气”| SelectedSkill!=“完成”)
{

std::cout我假设您指的是这个特殊的中断。if语句是一个0到RemainingPoints的赋值,因此永远不会计算为true。您应该使用==,这是一个常见的输入错误

    if(RemainingPoints = 0)
    {
        break;
    }

我假设您指的是这个特殊的中断。if语句是对RemainingPoints的赋值0,因此永远不会计算为true。您应该使用==,这是一种常见的输入错误

    if(RemainingPoints = 0)
    {
        break;
    }
这就是为什么写作更好的原因

if(0 = RemainingPoints)
并有一个编译器错误而不是一个恼人的错误

这就是为什么写作更好的原因

if(0 = RemainingPoints)

你只需将
SelectedSkill
设置为这些神奇字符串中的一个,你的while循环就会终止,这不会发生在
cin
行吗?阅读关于while语句的DeMorgan定律。@ChrisO the cin.fail()检查和cin.clear()这就确保了SelectedSkill不能终止循环作为潜在阻止滥用功能的手段,迫使用户使用Finished来保留剩余的点。至少我认为这就是你所说的。哎呀,请阅读@KeithSmith的链接,并想象一下如果用户输入
Luck
(区分大小写比较BTW),所以当
SelectedSkill==“Luck”
,查看while条件中的其余比较,它们将计算为true,从而确保您的无限循环。这就是为什么我试图通过RemainingPoints或Choice从循环中中断,我尝试了括号中的所有上述条件,后跟&&RemainingPoints!=0。因此,while((以前的条件)&&RemainingPoints!=0)但是,同样的问题是不执行coutAll,您必须将
SelectedSkill
设置为这些神奇字符串中的一个,您的while循环将终止,这不会发生在
cin
行吗?阅读关于while语句的DeMorgan定律。@ChrisO检查cin.fail()和cin.clear()这就确保了SelectedSkill不能终止循环作为潜在阻止滥用功能的手段,迫使用户使用Finished来保留剩余的点。至少我认为这就是你所说的。哎呀,请阅读@KeithSmith的链接,并想象一下如果用户输入
Luck
(区分大小写比较BTW),所以当
SelectedSkill==“Luck”
,查看while条件中的其余比较,它们将计算为true,从而确保您的无限循环。这就是为什么我试图通过RemainingPoints或Choice从循环中中断,我尝试了括号中的所有上述条件,后跟&&RemainingPoints!=0。因此,while((以前的条件)&&RemainingPoints!=0),但是,同样的问题是没有更好地执行coutOr,打开抱怨这种情况的编译器警告;-)或者更好地,打开抱怨这种情况的编译器警告;-)好的,我已经修复了错误,但是“循环完成”仍然未执行。在按enter键表示幸运14后,每当RemainingPoints==0时(因为在初始化时RemainingPoints被分配给14),它将允许我继续键入,并且不会执行进一步的代码。好的,我已修复了键入错误,但“循环完成”仍然未执行。每当按enter键表示幸运14后,RemainingPoints==0时(因为在初始化时剩余的点被分配到了14)它将允许我继续键入,并且不会执行进一步的代码。