0

プログラムを実行すると、最初のforループは問題なく動作しますが"Program has stopped working"、2 番目のループに入る前にメッセージが表示されwhileます。コーディングにエラーがありますか? もしそうなら、どうすれば修正できますか?

#include<stdio.h>

double Combat(int x, int y, char mons[20]);


int  main(void)
{
    int monsters, i, target, alive;

    while(1)
    {
        printf("ENTERING COMBAT\n\nHow many monsters?> ");
        scanf(" %d", &monsters);
        char monster[monsters][20];
        int monstermaxhp[monsters];
        int monsterhp[monsters];
        for(i=0;i<monsters;++i)
        {
            printf("\n\nNO SPACES\n\nEnter Monster %d's name> ", i+1);
            scanf("%s", &monster[i]);
            printf("\n\nEnter %s's hitpoints> ", monster[i]);
            scanf("%d", &monstermaxhp[i]);
            monsterhp[i]=monstermaxhp[i];
        }
            alive=1;
            while(alive==1)
        {
          for(i=0;i<monsters;++i)
        {
            printf("\n\n%d:%s%3c%3d/%d", i+1, ' ',monsterhp[i],monstermaxhp[i]);
        }
        printf("\n\nSelect Target> ");
        scanf("%d", &target);
        i=target-1;
        monsterhp[i]=Combat(monsterhp[i],monstermaxhp[i],monster[i]);
        for(i=0;i<monsters;++i)
        {
            if(monsterhp[i]<=0)
                alive=0;
        }
        }
    }
    return(0);
}


double Combat(int x, int y, char mons[20])
{
    int damage, plrroll, monroll;

    printf("\nRoll for %s> ", mons);
    scanf("%d", &monroll);
    printf("\nRoll for Player> ");
    scanf("%d", &plrroll);
    if(plrroll>monroll)
    {
        printf("\nHIT! Roll for damage> ");
        scanf("%d", &damage);
        x=x-damage;
    }
    else
    {
        printf("\nMISS! :P\n");
    }
    return(x);
}
4

2 に答える 2

2

変化する:

printf("\n\n%d:%s%3c%3d/%d", i+1, ' ',monsterhp[i],monstermaxhp[i]);

printf("\n\n%d: %s   %3d/%d", i+1, monster[i], monsterhp[i], monstermaxhp[i]);

間違った順序で printf しようとしています。モンスターの名前を聞き逃したようだ!%c を使用しても 3 つのスペースは必要ないため、代わりにフォーマット文字列にスペースをインライン化しました。

次のような出力が得られます。

1: 良い 1/1

2: イービル 2/2

于 2013-10-31T08:03:50.440 に答える
0

あなたのコードにいくつかの問題があります:

  1. 配列を宣言しています:外側のwhileでループするたびに、monster、monstermaxhp、およびmonsterhp

  2. そうではないreturn(0);..そのreturn 0;

  3. for ループでポスト インクリメントを行う (++iに変更i++)

  4. printf ステートメントを次のように修正します。

    printf("\n\n%d:%s%3c%3d/%d", i+1, monsterhp[i], ' ', monstermaxhp[i]);

  5. また変更:

    scanf("%s", &monster[i]);

    これに:

    scanf("%s", monster[i]);

于 2013-10-31T08:06:29.597 に答える