我在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向函数发送变量值,以便在此处正确输出文本。
答案 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;
}