сбой программы при вводе CIN | C ++ - PullRequest
0 голосов
/ 08 июня 2010

, поэтому я сделал программу для DOS, но моя игра всегда вылетает при втором запуске с функцией cin.

#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>

using namespace std;

//call functions
int create_enemyHP (int a);
int create_enemyAtk (int a);
int find_Enemy(int a);
int create_enemyDef (int a);

// user information
int userHP = 100;
int userAtk = 10;
int userDef = 5;
string userName;

//enemy Information
int enemyHP;
int enemyAtk;
int enemyDef;
string enemies[] = {"Raider", "Bandit", "Mugger"};
int sizeOfEnemies = sizeof(enemies) / sizeof(int);
string currentEnemy;
int chooseEnemy;

// ACTIONS 
int journey;

int test;

int main()
{
    // main menu 
    cout << "welcome brave knight, what is your name? " ;
    cin >> userName;
    cout << "welcome " << userName << " to Darland" << endl;

    //TRAVELING 

MENU:

    cout << "where would you like to travel? " << endl;
    cout << endl << " 1.> Theives Pass " << endl;
    cout << " 2.> Humble Town " << endl;
    cout << " 3.> Mission HQ " << endl;
    cin >> journey;

    if (journey == 1) 
    {

        // action variable;
        string c_action;

        cout << "beware your journey grows dangerous " << endl;

        //begins battle

        // Creating the enemy, HP ATK DEF AND TYPE. ;

        srand(time(0));

        enemyHP = create_enemyHP(userHP);

        enemyAtk = create_enemyAtk(userAtk);

        enemyDef = create_enemyDef(userDef);

        chooseEnemy = find_Enemy(sizeOfEnemies);

        currentEnemy = enemies[chooseEnemy];

        cout << " Here comes a " << currentEnemy << endl;
        cout << "stats: " << endl;
        cout << "HP :" << enemyHP << endl;
        cout << "Attack : " << enemyAtk << endl;
        cout << "Defense : " << enemyDef << endl;
ACTIONS:            
        cout << "Attack <A> | Defend <D> | Items <I>";
        cin >> c_action;

        //if ATTACK/DEFEND/ITEMS choice

        if (c_action == "A" || c_action == "a"){

            enemyHP = enemyHP - userAtk;
            cout << " you attack the enemy reducing his health to " << enemyHP << endl;
            userHP = userHP - enemyAtk;
            cout << "however he lashes back causing you to have " << userHP << "health left " << endl;
            //end of ATTACK ACTION
        }

последняя строка "cin >> c_action аварийно завершает работу. Я использую две другие страницы. Они просто создают функции. Является ли это проблемой компилятора? Кроме того, почему мой компилятор всегда отключается после запуска приложения. это?

Ответы [ 3 ]

1 голос
/ 08 июня 2010

Несколько подсказок: Я никогда не использую предварительные объявления функций (такие как «int create_enemyHP (int a);»), если я могу избежать их. Если вы сделаете это, то в вашем коде есть два места, которые должны быть правильными, чтобы ваша программа работала. Это облегчает жизнь, если всегда есть « единственный источник истины »

Вы запускали этот код через отладчик? Это поможет вам быстрее найти проблемы.

0 голосов
/ 08 июня 2010

Я не понял, происходит ли сбой программы до того, как вы введете «действие» или после. Потому что, если это произойдет раньше, то я думаю, что ваши проблемы вызваны пробелами во входном буфере.

0 голосов
/ 08 июня 2010

Если ваша переменная c_action предназначена только для символа, я бы предложил использовать переменную char вместо string.
Возможно, вы захотите попробовать этот способ, и если вы все еще сталкиваетесь с ошибкой, вы можете дать

scanf("%c", &c_action); //assuming you used a char.
...