如何从main获取变量值并将它们发送到函数?

时间:2017-12-14 13:20:35

标签: c++ function

我在IDE中运行此代码时遇到问题。你很早就可以看到我试图使用一个函数。这样做的原因是稍后通过输出文本来节省内存,但是函数中的变量会出现问题。 classType变量未初始化,我该如何防止这种情况?我在main中定义了它们,但是当我尝试使用main中的变量输出文本时,它就无法正常工作。

#include<iostream>
using namespace std;
string getName()
{
    string charName;
    int classType;
    cout << "What is your " << classType << "'s name?" << endl;
    cin >> charName;
    return charName;
}
int main()
{
    int classType; //Later we will ask the user what class they're playing.  
    string charName; 
    /*We will use a function to ask a question.  
    We use a function to save memory instead of copy-pasting the text*/
    cout <<"Welcome to \"Orcs and Ogres\"" << endl;
    cout << "What class do you want to play?  " << endl;
    cout << "\tType 1 for Warrior class]" << endl;
    cout << "\tType 2 for Archer class ]" << endl;
    cout << "\tType 3 for Mage class   ]" << endl;
    cin >> classType;
    if(classType == 1)
    {
        cout << endl << "You are a warrior" << endl;
        string classType;
        classType = "warrior";
        getName();
    }
    else if(classType == 2)
    {
        cout << endl << "You are an archer" << endl;
        string classType;
        classType = "archer";
        getName();
    }
    else if(classType == 3)
    {
        cout << endl << "You are a mage" << endl;
        string classType;
        classType = "mage";
        getName();
    }
    else
    {
        cout << endl << "UserError:  Number too high or too low";
    }
}

在使用getName()的代码行中,它会输出类似“你的 空白 的名字是什么?”而不是正确的classType。我想知道如何从main向函数发送变量值,以便在此处正确输出文本。

2 个答案:

答案 0 :(得分:0)

它无法工作的原因是因为你的getName函数不知道存储在classType变量中的什么。阅读函数变量范围如何工作以理解整个机制的工作可能是有益的。

如果您希望保留当前的程序实施。重写getName函数以接受字符串类作为参数

string getName(string classType)
{
  string charName;
  cout << "What is your " << classType << "'s name?" << endl;
  cin >> charName;
  return charName;
}

在您的主要内容中,您将调用该函数,如下所示:

getName("Warrior"); // to ask warrior for a warriors' name
getName("Mage"); // to ask for a mage's name.

您可能还想添加以在文件顶部包含字符串库,因为没有它也可能导致您的代码无法正常工作。同时确保正确存储从getName()函数返回的名称,如下所示:

string name = getName("Warrior");

此外,正如其他人所说的那样,或许可以阅读更多关于函数接收和返回值如何对您有益的信息。

答案 1 :(得分:0)

就这么简单。试试这个更新的代码...

#include<iostream>
using namespace std;
string getName(string classType)
{
    string charName;
    cout << "What is your " << classType << "'s name?" << endl;
    cin >> charName;
    cout<<"your "<<classType<< "'s name is "<<charName<<endl;
    return charName;
}
int main()
{
    int Type; 
    string charName; 
    cout <<"Welcome to \"Orcs and Ogres\"" << endl;
    cout << "What class do you want to play?  " << endl;
    cout << "\tType 1 for Warrior class]" << endl;
    cout << "\tType 2 for Archer class ]" << endl;
    cout << "\tType 3 for Mage class   ]" << endl;
    cin >> Type;
    if(Type == 1)
    {
        cout << endl << "You are a warrior" << endl;
        string classType;
        classType = "warrior";
        getName("warrior");
    }
    else if(Type == 2)
    {
        cout << endl << "You are an archer" << endl;
        string classType;
        classType = "archer";
        getName("archer");
    }
   else if(Type == 3)
   {
        cout << endl << "You are a mage" << endl;
        string classType;
        classType = "mage";
        getName("mage");
    }
    else
    {
        cout << endl << "UserError:  Number too high or too low";
    }
    return 0;
}