2015-07-21 56 views
-2

我正在制作基于文本的冒险游戏。基于文本的游戏中的C++输入

在介绍中,我让游戏要求玩家的名字,他们必须输入他们的名字,然后它会在输出中显示他们的名字。

cout << "U.S Soldier: Who's your name, Soldier?" << endl; 
_getch(); 
cout << "Type Your name: "; 
cin.getline(name, 50); 
cout << "U.S Soldier: I'm DIAZ, now let's go, " << name << "!!" << endl; 

然后它会转到另一个段(我使用void命令)。

void prologue() 
{ 
    system("cls"); 
    cout << "----------------------- PROLOGUE -------------------------" << endl; 
    cout << "\n"; 
    cout << "\n"; 
    cout << "Diaz: come on, " << name << ", there's no time for rest!!" << endl; 
} 

但在该段上该程序似乎忘记了来自上一段的输入(玩家名称)。

它只是显示为“1”,而不是

前的“名字”,我们输入我怎样才能使程序保持对整个游戏玩家的名字呢?

这是所有代码:

// getting player's name 

void name() 
{ 
    system("cls"); 
    char name[50]; 
    cout << "U.S Soldier: Hey, Wake Up!!" << endl; 
    _getch(); 
    cout << "You: (regain conciousness)" << endl; 
    _getch(); 
    cout << "U.S Soldier: Who's your name, Soldier?" << endl; 
    _getch(); 
    cout << "Type Your name: "; 
    cin.getline(name, 50); 
    system("cls"); 
    cout << "U.S Soldier: Hey, Wake Up!!" << endl; 
    cout << "You: (regain conciousness)" << endl; 
    cout << "U.S Soldier: Who's your name, Soldier?" << endl; 
    cout << "U.S Soldier: I'm DIAZ, now let's go, " << name << "!!" << endl; 
    _getch(); 
    prologue(); 
} 

// Intro (Prologue) 

void prologue() 
{ 
    system("cls"); 
    cout << "----------------------- PROLOGUE -------------------------" << endl; 
    cout << "\n"; 
    cout << "\n"; 
    cout << "Diaz: come on, " << name << ", there's no time for rest!!" << endl; 
} 
+0

'name'是一个局部变量,它只在'name()'函数中已知。您应该在全局范围内声明该数组。 – mrt

+0

这是C++,请*不要*使用char数组作为字符串。使用'std :: string'或其他字符串类。 – nvoigt

+0

你的代码似乎很多次重复'cout'和'_getch()'序列。你应该为它做一个功能,它有助于代码维护。无论何时您想要更改(例如添加格式),您都可以在一个位置完成更改。 – Melebius

回答

2

name您填充是本地name()方法。

prologue(),name是方法name(),而不是你期待的字符串。

您可以使name(字符串)为全局。我也避免使用相同名称的变量和方法(至少在你对这门语言更熟练之前)。

+0

是的,我忘记使用相同的名称,谢谢 – Joe

0

你的答案在于你的问题本身。

如何让程序保持整个游戏玩家的名字?

如果你知道变量的范围和生命周期,你会知道你填充的名字是在name()中声明的,因此它是该函数的本地对象,它不能被访问功能。为了使整个程序可以访问,请将其声明为全局变量。

另外,您在序言()中使用的名称是函数名称(),而不是您已填充的变量。

+0

哎呀,对不起,我不知道我使用相同的名称为变量和函数,谢谢你的方式.. – Joe

0

你可以考虑做这个cin.getline(name,50);主要还是创建一个字符对象并将该名称分配给字符对象

0

如果在块/函数中声明变量,则该变量位于该块/函数的本地。这里你可以在name()函数内使用name变量。要在另一个函数中使用它,要么全局声明它(即,在所有函数之外),要么将它作为参数传递给prologue()函数。还要避免为不同的标识符使用相同/相似的名称。