2015-07-21 88 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()函數。還要避免爲不同的標識符使用相同/相似的名稱。