您好我正在尝试学习如何编程,而且我一直在使用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;
}
答案 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}}