为什么我的变量在我设置的类之外打印时会给出不同的值?

时间:2015-08-12 19:39:32

标签: c++ variables integer output text-based

我正在使用相当新的C ++,我正在使用它为学校项目制作基于文本的游戏。然而,在游戏的第一部分中,玩家通过输入他们选择的答案旁边显示的数字来回答问题。然而,当我测试变量输入到 std :: cout 时,它们会根据输出的位置返回不同的值。如果我在我用来设置它们的类(简介)中输出它们,它们会返回正确的值,例如1或3等。但是当我在除引言之外的任何文件中输出它们时.cpp ,显示的值为-858993460,表示所有值。当我在 main 函数中调用它们时,我从 Main.cpp 得到相同的结果,如果我从另一个类中的另一个函数调用它们简介

这是用于从用户获取输入的一些代码的示例:

void Introduction::CharacterCreation()
{
    Universal universal;

    std::fstream creation("Introduction_CharacterCreation.txt");
    universal.line = 5;

    for (int i = 0; i < universal.line; i++)
    {
        if (i > 0)
        {
            std::getline(creation, universal.displayText);
            std::cout << universal.displayText << std::endl;
        }
        if (i == 4)
        {
            std::cout << std::endl;
            std::cin >> universal.gender;

            while (universal.gender <= 0 || universal.gender >= 3)
            {
                std::cout << "Please make a valid choice" << std::endl;
                std::cin >> universal.gender;
            }
        }
    }
// Code cut out here
}

性别变量是在通用类中声明的 int ,系统会提示用户为男性输入1或为女性输入2通过从单独的文件中提取的文本。如果输入不是1或2,那么while循环会强制玩家继续重新回答问题,直到他们输入1或2. 变量也是 int 但是,它用于 for 循环,以确保程序读取正确的行。

要输出性别变量,这是我使用的代码:

std::cout << gender << std::endl;

没有通用。,因为它是在通用类本身中调用的。

这使我大为困惑,我无法理解导致问题的原因。任何帮助或解释都会很棒,提前谢谢。

1 个答案:

答案 0 :(得分:1)

简短回答:您在Universal方法中声明了CharacterCreation()个对象。当此函数退出时,universal变量的范围是本地的,因此整个对象都会被销毁。

无论您输出的是什么,都是未初始化的垃圾。它实际上可以是任何数字,具体取决于编译/运行程序的系统。要在输入性别后立即对此进行测试,同时仍在函数内部,请尝试运行

std::cout << universal.gender << std::endl;

这应该输出正常。

有很多方法可以解决这个问题。由于您没有发布您称之为此方法的地方或您Universal课程,我无法确定。但我可以推测一个这样的解决方案,即在方法之外声明Universal对象,然后将其作为参数传递:

Universal universal = Universal();
Introduction::CharacterCreation(universal);
std::cout << universal.gender << std::endl;

只需声明您的函数标头以接受Universal对象:

void Introduction::CharacterCreation(Universal & universal)
{
//code here
}