0

これは呼び出された関数です:

    int onBattle(int level,char nomeheroi[20])
{
        const char *monsternames[4][3] = {
        {"Rat","Bat","Spider"},
        {"Goblin","Orc","Dwarf"},
        {"Dragon","Lich","Banshee"},
        {"Demon","Hydra","Giant Spider"}
        };
        //printf("monster hp:%f  , player hp:%f, player name:%s ",globalvar.monterhp, globalvar.playerhp,nomeheroi);
    char opcaobattle;
    rndMonster(level);

    while((globalvar.monterhp > 0) || (globalvar.playerhp > 0)){
    printf("Monster name:%s\n",monsternames[globalvar.monstercatego][globalvar.monsternivel]);
    printf("Monster Life:%f\n",globalvar.monterhp);
    printf("------------------------------------------\n");
    printf("----------------BattleGround--------------\n");
    printf("------------------------------------------\n");
    printf("Player name:%s\n", nomeheroi);
    printf("Player life:%f\n", globalvar.playerhp);
    printf("----------------------------------------\n");
    printf("------------------Menu------------------\n");
    printf("----------------------------------------\n");
    printf("A - Attack\n");
    printf("D - Defend\n");
    scanf("%c",&opcaobattle);
    switch(opcaobattle)
    {
        case 'a':
        danoPMonster();
        break;

        case 'd':

        break;
    }
  }

  if(globalvar.monterhp <= 0)
    {
        return 0;
    }
  else if(globalvar.playerhp <= 0)
    {
      return 1;
    }
}

これが起こることです: 2回表示

Scanfで停止する前にこのコードを2回表示しても問題はありません。Do Whileも試してみましたが、同じことが起こりましたか?ps: その globalvar はグローバル構造体であり、はい、値があります

4

1 に答える 1

1
    scanf("%c",&opcaobattle);

変換指定子にスペースを追加して、ストリーム内で残りの改行文字を使用していないことを確認することをお勧めします。

    scanf(" %c",&opcaobattle);

スイッチのデフォルトのケースもあると良いかもしれません:

default:
    printf("Please enter one of the available commands.\n");
于 2013-11-09T19:31:21.483 に答える