2013-11-27 65 views
2

所以我有一個基於文本的冒險遊戲,它的運行流暢,但我的一個「測試者」注意到他可以在第一個cin中選擇多個數字,並且將這些值用於遊戲的其餘部分。我可以手動將塊鎖定在用戶必須鍵入的字符數量上嗎? 這是我的計劃如何讓用戶只輸入一個字符?

#include <iostream> 
#include <stdio.h> 
#include <cstdio> 
#include <cstdlib> 

char Choice; 
char my_name; 

using namespace std; 

int main() 
{ 
    printf("You come out of darkness.\n"); 
    printf("Confused and tired, you walk to an abandoned house.\n"); 
    printf("You walk to the door.\n"); 
    printf("What do you do?\n"); 
    printf("1. Walk Away.\n"); 
    printf("2. Jump.\n"); 
    printf("3. Open Door.\n"); 
    printf(" \n"); 
    cin >> Choice; 
    printf(" \n"); 

    if(Choice == '1') 
    { 
     printf("The House seems too important to ignore.\n"); 
     printf("What do you do?\n"); 
     printf("1. Jump.\n"); 
     printf("2. Open Door.\n"); 
     printf(" \n"); 
     cin >> Choice; 
     printf(" \n"); 

等等,你如果你想讓玩家能夠按像123鍵,而無需按回車鍵得到它

回答

3

這在很大程度上取決於平臺,並不存在簡單的全面解決方案,但一個可行的解決方案是使用std::getline一次讀取一行,或者忽略除第一個字符以外的所有內容,或者在輸入了多個字符時發出投訴。

string line; // Create a string to hold user input 
getline(cin,line); // Read a single line from standard input 
while(line.size() != 1) 
{ 
    cout<<"Please enter one single character!"<<endl; 
    getline(cin, line); // let the user try again. 
} 
Choice = line[0]; // get the first and only character of the input. 

因此會提示用戶輸入一個字符,如果他們輸入更多或更少(少一個空字符串)。

2

要點,你」重新快速進入平臺特定的代碼。在Windows平臺上,老派(以及老派,我的意思是「可追溯到80年代DOS時代」)的控制檯方式是使用conio例程。

雖然在標準C++中沒有定義這種接口的東西。

另一種方法是使用getline每次都得到整行文本的值,然後丟棄第一個字符後面的所有內容。這將使你保持簡單的C++,並解決你的直接問題。

+0

謝謝!但是,getline會去哪裏?在cin操作符下? – TheAwesomElf

+0

http://stackoverflow.com/questions/7679246/c-cin-char-read-symbol-by-symbol – doctorlove

+0

下面是'getline'的原始文檔:http://en.cppreference.com/w/cpp/ string/basic_string/getline 你需要做的是聲明一個'string'來捕獲輸入,然後查看字符串的第一位以確定玩家選擇的內容。你最好把這一點放到一個專門的功能中。 –

相關問題