一次调用多个函数的程序不断崩溃。 (C编程)

时间:2016-10-03 03:10:39

标签: c struct

您好我正在尝试学习如何编程,而且我一直在使用C中的结构和指针。所以我只是制作了这个非常随机的岩石剪刀esque程序,它可以部分工作,但最终会在几个之后崩溃循环和我一直试图缩小问题无济于事,任何洞察力将非常感激!

以下是代码:

 #include <stdio.h>
 #include <string.h>
 #include <time.h>
 #include <stdlib.h>
  struct mainChar{

  int hp;
  char name[50];
  int ability;
  int abilitydmg;
  int edefense;
 };
   struct enemyChar{
   int ehp;
   char ename[50];
   int eability;
   int eabilitydmg;
   int edefense;

    };

    typedef struct mainChar mainchar_t;
    typedef struct enemyChar enemychar_t;
    void oppdaternavnMC(mainchar_t *hoved);
    void oppdaterenavnenemy(enemychar_t* hoved);
    void oppdatereability(mainchar_t *angrep);
    void oppdaterehp(enemychar_t *evullief);
    void oppdaterhp(mainchar_t *lief);


    int main(){
    char e;


    int ai;
    int fortsett;
    srand(time(NULL));
    fortsett=1;
    mainchar_t mainchar;
    enemychar_t enemychar;
    mainchar.hp=100;
    enemychar.ehp=100;
    oppdaternavnMC(&mainchar);
    printf("%s is your name!\n", mainchar.name);
    oppdaterenavnenemy(&enemychar);
     printf("%s is your enemys name\n", enemychar.ename);
//1 kick, 2 punch 3 throw
    do{
      oppdatereability(&mainchar);
      ai=(rand()%3)+1;
      if(mainchar.ability==1){
        printf("you kicked!\n");
        //ai=1;
        //ai=(rand()%3)+1;
        if(ai==1){
            printf("you both kicked!\n");
            oppdaterehp(&enemychar);
            oppdaterhp(&mainchar);
            printf("%s hp: %d\n %s hp: %d\n",mainchar.name, mainchar.hp, enemychar.ename, enemychar.ehp);
        }else if(ai==2){
            printf("%s attempts to punch!\n", enemychar.ename);
            oppdaterehp(&enemychar);
            oppdaterhp(&mainchar);
            printf("%s hp: %d\n %s hp: %d\n",mainchar.name, mainchar.hp, enemychar.ename, enemychar.ehp);
        }else if(ai==3){
            printf("%s attempts to throw!\n", enemychar.ehp);
            oppdaterehp(&enemychar);
            oppdaterhp(&mainchar);
            printf("%s hp: %d\n %s hp: %d\n",mainchar.name, mainchar.hp, enemychar.ename, enemychar.ehp);
        }else{
            printf("what");
        }
        }else if(mainchar.ability==2){
        printf("you punched!\n");
        //ai=(rand()%3)+1;
        if(ai==1){
            printf("%s attempts to kick ferociously!\n", enemychar.ehp);
            oppdaterehp(&enemychar);
            oppdaterhp(&mainchar);
            printf("%s hp: %d\n %s hp: %d\n",mainchar.name, mainchar.hp, enemychar.ename, enemychar.ehp);
        }else if(ai==2){
            printf("you both punch!\n", enemychar.ename);
            oppdaterehp(&enemychar);
            oppdaterhp(&mainchar);
            printf("%s hp: %d\n %s hp: %d\n",mainchar.name, mainchar.hp, enemychar.ename, enemychar.ehp);
        }else if(ai<=3){
            printf("%s attempts to throw!", enemychar.ehp);
            oppdaterehp(&enemychar);
            oppdaterhp(&mainchar);
            printf("%s hp: %d\n %s hp: %d\n",mainchar.name, mainchar.hp, enemychar.ename, enemychar.ehp);
        }else{  
            printf("what");

        }


    }else if(mainchar.ability==3){
        printf("you started throwing %s\n", enemychar.ehp);
        //ai=(rand()%5)+1;
        if(ai==1){
            printf("%s started kicking ferociously!\n", enemychar.ehp);
            oppdaterehp(&enemychar);
            oppdaterhp(&mainchar);
            printf("%s hp: %d\n %s hp: %d\n",mainchar.name, mainchar.hp, enemychar.ename, enemychar.ehp);
        }else if(ai==2){
            printf("%s attempts to punch!\n", enemychar.ename);
            oppdaterehp(&enemychar);
            oppdaterhp(&mainchar);
            printf("%s hp: %d\n %s hp: %d\n",mainchar.name, mainchar.hp,  enemychar.ename, enemychar.ehp);
        }else if(ai<=3){
            printf("you both started throwing!", enemychar.ehp);
            oppdaterehp(&enemychar);
            oppdaterhp(&mainchar);
            printf("%s hp: %d\n %s hp: %d\n",mainchar.name, mainchar.hp,        enemychar.ename, enemychar.ehp);
        }else{
            printf("what");
        }


    }



}while(fortsett==1);
if(mainchar.hp==0){
    printf("you lost!");
}else{
    printf("you won!");
}
}



void oppdaterenavnenemy(enemychar_t* hoved){
  char hode[50];
  printf("Enter the name of your enemy: ");
  scanf("%s",&hode );
  strcpy(hoved->ename, hode);
}
void oppdaternavnMC(mainchar_t* hoved){
  char hode[50];
  printf("Enter the name of your character: ");
  scanf("%s",&hode );
  strcpy(hoved->name, hode);
}
void oppdatereability(mainchar_t *angrep){
  int h;
  printf("velg ditt angrep\n 1. kick\n 2.punch\n3.throw\n");
  scanf("%d", &h);
  printf("\n dette er hvilket input some er registrert! %d\n", h);
  angrep->ability=h;
}
void oppdaterhp(mainchar_t *lief){
  int a;
  a=lief->hp-(rand()%20)+1;
  lief->hp=a;

}
void oppdaterehp(enemychar_t *evullief){

  int b;
  b=evullief->ehp-(rand()%20)+1;
  evullief->ehp=b;

}

1 个答案:

答案 0 :(得分:1)

%s printf()代替%d多次scanf("%s",&hode );,其他地方的论据过多,scanf("%s",hode );每次都必须#include <stdio.h> #include <string.h> #include <time.h> #include <stdlib.h> struct mainChar { int hp; char name[50]; int ability; int abilitydmg; int edefense; }; struct enemyChar { int ehp; char ename[50]; int eability; int eabilitydmg; int edefense; }; typedef struct mainChar mainchar_t; typedef struct enemyChar enemychar_t; void oppdaternavnMC(mainchar_t * hoved); void oppdaterenavnenemy(enemychar_t * hoved); void oppdatereability(mainchar_t * angrep); void oppdaterehp(enemychar_t * evullief); void oppdaterhp(mainchar_t * lief); #define START_POWER 100 int main() { int ai; int fortsett; srand(time(NULL)); fortsett = 1; mainchar_t mainchar; enemychar_t enemychar; mainchar.hp = START_POWER; enemychar.ehp = START_POWER; oppdaternavnMC(&mainchar); printf("%s is your name!\n", mainchar.name); oppdaterenavnenemy(&enemychar); printf("%s is your enemys name\n", enemychar.ename); //1 kick, 2 punch 3 throw do { oppdatereability(&mainchar); ai = (rand() % 3) + 1; if (mainchar.ability == 1) { puts("you kicked!"); //ai=1; //ai=(rand()%3)+1; if (ai == 1) { puts("you both kicked!"); oppdaterehp(&enemychar); oppdaterhp(&mainchar); printf("%s hp: %d\n %s hp: %d\n", mainchar.name, mainchar.hp, enemychar.ename, enemychar.ehp); } else if (ai == 2) { printf("%s attempts to punch!\n", enemychar.ename); oppdaterehp(&enemychar); oppdaterhp(&mainchar); printf("%s hp: %d\n %s hp: %d\n", mainchar.name, mainchar.hp, enemychar.ename, enemychar.ehp); } else if (ai == 3) { printf("%d attempts to throw!\n", enemychar.ehp); oppdaterehp(&enemychar); oppdaterhp(&mainchar); printf("%s hp: %d\n %s hp: %d\n", mainchar.name, mainchar.hp, enemychar.ename, enemychar.ehp); } else { printf("what"); } } else if (mainchar.ability == 2) { printf("you punched!\n"); //ai=(rand()%3)+1; if (ai == 1) { printf("%d attempts to kick ferociously!\n", enemychar.ehp); oppdaterehp(&enemychar); oppdaterhp(&mainchar); printf("%s hp: %d\n %s hp: %d\n", mainchar.name, mainchar.hp, enemychar.ename, enemychar.ehp); } else if (ai == 2) { puts("you both punch!"); oppdaterehp(&enemychar); oppdaterhp(&mainchar); printf("%s hp: %d\n %s hp: %d\n", mainchar.name, mainchar.hp, enemychar.ename, enemychar.ehp); } else if (ai <= 3) { printf("%d attempts to throw!", enemychar.ehp); oppdaterehp(&enemychar); oppdaterhp(&mainchar); printf("%s hp: %d\n %s hp: %d\n", mainchar.name, mainchar.hp, enemychar.ename, enemychar.ehp); } else { printf("what"); } } else if (mainchar.ability == 3) { printf("you started throwing %d\n", enemychar.ehp); //ai=(rand()%5)+1; if (ai == 1) { printf("%d started kicking ferociously!\n", enemychar.ehp); oppdaterehp(&enemychar); oppdaterhp(&mainchar); printf("%s hp: %d\n %s hp: %d\n", mainchar.name, mainchar.hp, enemychar.ename, enemychar.ehp); } else if (ai == 2) { printf("%s attempts to punch!\n", enemychar.ename); oppdaterehp(&enemychar); oppdaterhp(&mainchar); printf("%s hp: %d\n %s hp: %d\n", mainchar.name, mainchar.hp, enemychar.ename, enemychar.ehp); } else if (ai <= 3) { puts("you both started throwing!"); oppdaterehp(&enemychar); oppdaterhp(&mainchar); printf("%s hp: %d\n %s hp: %d\n", mainchar.name, mainchar.hp, enemychar.ename, enemychar.ehp); } else { puts("what"); } } } while (fortsett == 1); if (mainchar.hp == 0) { printf("you lost!"); } else { printf("you won!"); } } void oppdaterenavnenemy(enemychar_t * hoved) { char hode[50]; int res; printf("Enter the name of your enemy: "); res = scanf("%49s", hode); if(res != 1){ fprintf(stderr,"scanf in oppdaterenavnenemy() failed\n"); } strcpy(hoved->ename, hode); } void oppdaternavnMC(mainchar_t * hoved) { char hode[50]; int res; printf("Enter the name of your character: "); res = scanf("%49s", hode); if(res != 1){ fprintf(stderr,"scanf in oppdaternavnMC() failed\n"); } strcpy(hoved->name, hode); } void oppdatereability(mainchar_t * angrep) { int h, res; printf("velg ditt angrep\n 1. kick\n 2.punch\n3.throw\n"); res = scanf("%d", &h); if(res != 1){ fprintf(stderr,"scanf in oppdatereability() failed\n"); } printf("\n dette er hvilket input some er registrert! %d\n", h); angrep->ability = h; } void oppdaterhp(mainchar_t * lief) { int a; a = lief->hp - (rand() % 20) + 1; lief->hp = a; } void oppdaterehp(enemychar_t * evullief) { int b; b = evullief->ehp - (rand() % 20) + 1; evullief->ehp = b; } 。如果它发出警告,请听你的编译器,编译器在这方面几乎总是正确的。

这是您修改上面列出的所有错误的代码。它有更多的问题,但我相信你可以自己解决它们。

{{1}}