2016-10-03 8 views
-1

こんにちは私はプログラムの仕方を学ぼうとしていますが、Cの構造体とポインタを使っていました。ちょうど部分的にしか動作しないが、いくつかのループと私は無駄に問題を絞り込むしようとしており、これについての洞察は非常に感謝される!あなたはscanf("%s",hode);たびにする必要がありprintf()代わりの%d数回、あまりにも多くの引数を他の場所にあるとscanf("%s",&hode);%sを持って一度に複数の関数を呼び出すプログラムがクラッシュする。 (Cプログラミング)

#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; 

} 
+0

メインキャラクタと敵キャラクタに異なる構造タイプの利点は何ですか?主なキャラクター・フィールドは、「防衛」の代わりに「敵と同じ」エフェンセンス(なぜなら、おそらく保証されていない2つの異なるタイプを保有していると仮定して)と他の名前と一致するのはなぜですか? –

答えて

1

:ここ

はコードです。コンパイラが警告を発する場合はコンパイラを聞いてください。

上記のすべてのエラーが修正されたコードがあります。それはより多くの問題を抱えていますが、私はあなた自身で解決できると確信しています。

#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; 
} 
関連する問題