1

プログラムでこの関数を実行するコマンドを入力すると、実行されてからクラッシュし、次のように表示されます。

「アプリケーションは、ランタイムに異常な方法でそれを終了するように要求しました。」

なぜこれを行うのですか?

void showInventory(player& obj) {
    std::cout << "\nINVENTORY:\n";
    for(int i = 0; i < 20; i++) {
        std::cout << obj.getItem(i);
        i++;
        std::cout << "\t\t\t" << obj.getItem(i) << "\n";
    }
}

std::string getItem(int i) {
        return inventory[i];
    }   
4

4 に答える 4

1

このコードでは:

std::string toDo(player& obj) //BY KEATON
{
    std::string commands[5] =   // This is the valid list of commands.
    {"help", "inv"};

    std::string ans;
    std::cout << "\nWhat do you wish to do?\n>> ";
    std::cin >> ans;

    if(ans == commands[0]) {
        helpMenu();
        return NULL;
    }
    else if(ans == commands[1]) {
        showInventory(obj);
        return NULL;
    }
}

する必要があります:

std::string toDo(player& obj) //BY KEATON
{
    std::string commands[5] =   // This is the valid list of commands.
    {"help", "inv"};

    std::string ans;
    std::cout << "\nWhat do you wish to do?\n>> ";
    std::cin >> ans;

    if(ans == commands[0]) {
        helpMenu();
        return "";
    }
    else if(ans == commands[1]) {
        showInventory(obj);
        return "";          // Needs to be '""'
    }
}

プロトタイプスタークの功績!

于 2012-10-13T23:14:44.990 に答える
0

i = 19の場合、配列の最後のアイテムを取得します。その後、iは20になり、範囲外の例外が発生する別のgetItemがあります。

于 2012-10-13T21:27:38.983 に答える
0
for(int i = 0; i < 20; i++) {
    std::cout << obj.getItem(i);

これはあまり正しくありません。マジックナンバーは使用しないでください。20の代わりにintlistSize= obj.ListSize()を使用します(これはあなたによって実装されます)

listSize = obj.ListSize();
    for(int i = 0; i <listSize ; i++) {
        std::cout << obj.getItem(i);

このようにして、範囲外にいないことを確認できます。

また、1つのループで2つのアイテムを印刷したい場合(理由はわかりません)、次のことができます。

void showInventory(player& obj) {   // By Johnny :D
    std::cout << "\nINVENTORY:\n";
    int listSize = obj.ListSize()/2; //if you are sure that is odd number
    for(int i = 0; i < listSize; ++i) {
        std::cout << obj.getItem(i);
        i++;
        std::cout << "\t\t\t" + obj.getItem(i) + "\n";
    }
} 
于 2012-10-13T21:30:47.220 に答える
0

関数を書く:

class player{
public:
//--whatever it defines 
int ListSize()
{
   return (sizeof(inventory)/sizeof(inventory[0]));
}
};

次に、

void showInventory(player& obj) {   // By Johnny :D
    int length = obj.ListSize();
    std::cout << "\nINVENTORY:\n";
    for(int i = 0; i < length; i++) {
        std::cout << obj.getItem(i);
        i++;
        std::cout << "\t\t\t" << obj.getItem(i) << "\n";
    }
}
于 2012-10-13T21:35:52.803 に答える