2011-02-27 20 views
7
void GameBoard::enterShips() 
{ 
    char location[1]; 
    int ships = 0; 
    int count = 1; 

    while(ships < NUM_SHIPS) 
    { 
     cout << "Enter a location for Ship " << count << ": "; 
     cin >> location; 
     cout << endl; 

     Grid[location[0]][location[1]] = SHIP; 
     ships++; 
     count++; 
    } 
} 

मैं एक युद्धपोत खेल लिख रहा हूं। मेरे पास बोर्ड लेआउट काम कर रहे हैं और कंप्यूटर यादृच्छिक रूप से जेनरेट किए गए जहाजों हैं। अब मैं उपयोगकर्ता जहाजों जब मैं कार्यक्रम चलाने के लिए निर्देशांक दर्ज करने का संकेत करने के लिए इस पद्धति पर काम कर रहा हूँ, यह मेरे 5 जहाजों में प्रवेश करने की अनुमति देता है। जब मैं 6 वें जहाज में प्रवेश करता हूं, तो यह मुझे यह त्रुटि देता है।परिवर्तनीय '' के चारों ओर ढेर

चर स्थान के आसपास ढेर दूषित है।

Ive ने ऑनलाइन उत्तरों की तलाश की और कुछ भी विशिष्ट नहीं मिला।

किसी भी मदद की सराहना की जाएगी।

+0

;' - (सूचकांक आप एक 2 से 1 सरणी दे देंगे कि:: आप आसानी से के बजाय दो int वस्तुओं में धारा से पढ़ कर ऐसा कर सकते हैं [0 ] [0] और [0] [1]) – RageD

उत्तर

5

आप अपने उपयोगकर्ता के लिए location सरणी की स्मृति पता उत्साह रहे हैं। आकार 1 की एक सरणी के बाद से

void GameBoard::enterShips() 
{ 
    int location[2]; 
    int ships = 0; 
    int count = 1; 

    while(ships < NUM_SHIPS) 
    { 
     cout << "Enter a location for Ship " << count << ": "; 
     cin >> location[0]; 
     cin >> location[1]; 
     cout << endl; 

     Grid[location[0]][location[1]] = SHIP; 
     ships++; 
     count++; 
    } 
} 

सूचना int location[2]; केवल एक ही तत्व पकड़ कर सकते हैं: आप अलग से स्थान सूचकांकों से पूछना चाहिए। मैंने तत्व प्रकार को int में भी बदल दिया। चार के पढ़ना कंसोल से ASCII मूल्यों, जो शायद नहीं कर रहे हैं कि आप क्या चाहते का परिणाम देगा।

+0

धन्यवाद, मुझे पता है आप ऐसा कर सकता है नहीं था। – bluetickk

12

location एक char की एक सरणी है।
कोई location[1] नहीं है।

3

आप location चर केवल एक ही चरित्र पकड़ करने में सक्षम बनाया है। आप इसे कम से कम 2 अक्षर रखने की उम्मीद करते हैं। आप CIN का उपयोग कर और ठीक दो वर्णों को पढ़ने के लिए उम्मीद कर रहे हैं, एक बेहतर तरीका होगा:

char locationX, locationY; 
// ... 
std::cin >> locationX >> locationY; 
// ... 
Grid[locationX][locationY] = SHIP; 
3
cin >> location; 

location एक char की एक सरणी है। यह सफल नहीं हो सकता है क्योंकि जब आप किसी स्ट्रीम से char सरणी में पढ़ते हैं, तो एक शून्य टर्मिनेटर को जोड़ा जाना चाहिए (जो एक वर्ण लेता है)। आप अनिवार्य रूप से सरणी की सीमाओं को खत्म कर देंगे।

std::string location; 
if (!(std::cin >> location)) { 
    // handle input error 
} 

भी ध्यान रखें कि आप शायद सांख्यिक मानों में संख्याओं की स्ट्रिंग अभ्यावेदन बदलने की आवश्यकता:

आप एक std::string है, जो की मदद से आप किसी भी बफर लंघन मुद्दों से बचने का उपयोग कर सकते हैं। इसके बजाय `कोशिश चार स्थान [1] [2]

int x_location, y_location; 
if (!(std::cin >> x_location >> y_location)) { 
    // Handle input error 
} 

if (x_location >= X_DIMENSION || x_location < 0 || 
    y_location >= Y_DIMENSION || y_location < 0) { 
    // Handle out-of-range error 
} 

// use x_location and y_location 
संबंधित मुद्दे