C++ 在我设置了一个整数值后,程序提前结束

C++ 在我设置了一个整数值后,程序提前结束,c++,C++,我不知道为什么ZaneNightTrain=0;自动结束程序。我可以把数字设为2,它就完成了它应该做的事情。我试着设置它,所以他说的第一句话是1而不是0,它也开始结束程序。我有另一个版本的代码,您可以输入一个数字而不是一个字符串来交谈,它没有问题。您没有初始化ZaneRightTrain的值 前一个问题可能会帮助您更全面地了解正在发生的事情。 TLDR是指声明变量的值不受保证,如果要将其作为程序中的第一个操作进行检查,则必须将其设置为默认值。解决此类问题的正确工具是调试器。在询问堆栈溢出之前,

我不知道为什么ZaneNightTrain=0;自动结束程序。我可以把数字设为2,它就完成了它应该做的事情。我试着设置它,所以他说的第一句话是1而不是0,它也开始结束程序。我有另一个版本的代码,您可以输入一个数字而不是一个字符串来交谈,它没有问题。

您没有初始化ZaneRightTrain的值

前一个问题可能会帮助您更全面地了解正在发生的事情。


TLDR是指声明变量的值不受保证,如果要将其作为程序中的第一个操作进行检查,则必须将其设置为默认值。

解决此类问题的正确工具是调试器。在询问堆栈溢出之前,应该逐行检查代码。如需更多帮助,请阅读。至少,您应该[编辑]您的问题,以包括一个重现您的问题的示例,以及您在调试器中所做的观察。如果没有猜测,此问题目前无法回答。建议:用一个具有良好的可测试条件的循环替换这些GOTO,然后看看您在条件中输入了什么。为什么要对自己如此苛刻?如果命令没有与ZANE对话,那么如果ZaneNightTrain不是1或2,则将执行函数末尾的返回。我尝试过,但似乎没有将其设置为0。数字似乎仍在上升。在比较之前,您应该附加调试器或添加一些cout语句来查看变量的值。他们可能不是你想象的那样。
string command;
int ZaneNightTrain;

NightTrain:

cin.ignore();
getline(cin, command);
transform(command.begin(), command.end(),command.begin(), ::toupper);
if (command == "TALK TO ZANE")
{

    if (ZaneNightTrain == 0)
    {
        cout << "\nZane: Blah Blah Blah 1\n\n";
        ZaneNightTrain++;

        goto NightTrain;
    }
}
else if (ZaneNightTrain == 1)
{
    cout << "\nZane: Blah blah blah 2\n" << endl;
    ZaneNightTrain++;
    goto NightTrain;
}
else if (ZaneNightTrain == 2)
{
    cout << "\nBlah blah blah 3\n" << endl;

    ZaneNightTrain = 0;

    goto NightTrain;
}

return 0;
}
int ZaneNightTrain = 0;