gpt4 book ai didi

无法让 if 语句/while 循环工作

转载 作者:行者123 更新时间:2023-11-30 20:21:29 25 4
gpt4 key购买 nike

无法使 if 语句/while 循环工作。如果我将 raceChosen 设置为 int,它将永远不允许我进入选择另一场比赛。当我使用 char 时,if 语句不起作用。我完全不知道该找谁来解决这个问题。如能提供任何帮助,我们将不胜感激。

#include<stdio.h>
#include<string.h>
#include <stdlib.h>
#include <time.h>

struct player { /*a struct to hold the player information.*/
int type[7];
int name[12];
int Smartness[7];
int Strength[7];
int MagicSkills[7];
int Luck[7];
int Dexterity[7];
int lifePoints[3];
}player;



int main(void)
{
struct player* ptr;
srand(time(NULL));
int numberPlayers,i,j,Smartness,Luck,Strength,Dexterity;
int MagicSkills,name,slots,x,Hill,City,LevelGround,m,lifePoints;
lifePoints = 100;
char raceChosen[1];


printf("Please enter the number of players you would like");
scanf("%d",&numberPlayers); /*take in the number of players*/

struct player plyr[numberPlayers];
i = 0;

while( i<numberPlayers )
{

printf("Please enter the race you would like to play as \n"
"Press elf for Elf \n"
"Press 1 for Human \n" /*taking in the race from the user*/
"Press 2 for Ogre \n"
"Press 3 for Wizard \n");
scanf(" %c",&raceChosen);


if(raceChosen == "0"){
printf("Please enter your name \n:");
scanf("%d", &ptr->name[i]);
Smartness = rand()%31 + 70;
printf("%d\n",Smartness);
scanf("%d", &ptr->Smartness[i]);
Luck = rand()%41 + 60;
printf("%d \n",Luck);
scanf("%d", &ptr->Luck[i]);
Strength = rand()%50 + 1;
printf("%d \n",Strength); /* generating the character */
scanf("%d", &ptr->Strength[i]);
Dexterity = rand()%100 + 1;
printf("%d\n",Dexterity);
scanf("%d", &ptr->Dexterity[i]);
MagicSkills = rand()%31 + 50;
printf("%d \n",MagicSkills);
scanf("%d", &ptr->MagicSkills[i]);
printf("\n********\n");

}


if(raceChosen == "1"){
printf("Please enter your name \n:");
scanf("%d", &ptr->name[i]);
Smartness = rand()%31 + 70;
printf("%d\n",Smartness);
scanf("%d", &ptr->Smartness[i]);
Luck = rand()%41 + 60;
printf("%d \n",Luck);
scanf("%d", &ptr->Luck[i]);
Strength = rand()%50 + 1;
printf("%d \n",Strength);
scanf("%d", &ptr->Strength[i]);
Dexterity = rand()%100 + 1;
printf("%d\n",Dexterity);
scanf("%d", &ptr->Dexterity[i]);
MagicSkills = rand()%31 + 50;
printf("%d \n",MagicSkills);
scanf("%d", &ptr->MagicSkills[i]);
printf("\n********\n");



}

}
i++;
}

}

最佳答案

首先,我建议您在提出问题之前尝试编译代码。

无论如何,让我们逐步检查一下编译错误:

  1. 第 43 行:将错误的变量类型传递给 scanf

    您只需要标准输入中的一个字符,因此不需要字符串数组(char *),只需使用字符变量(char)

    因此 char raceChosen[1] 变为 char raceChosen

  2. 第 46 行和第 69 行:使用 == 运算符比较两个字符串

    这是开始学习 C 编程基础知识的一个很好的理由。要在 C 中比较两个字符串,请使用 strcmp(first_string, secondary_string)

    由于raceChosen不再是字符数组,我们不需要strcmp,我们仍然可以使用==,但0和1周围的引号必须是单引号。

    因此,您的 if 语句将变为 if(raceChosen == '0')if(raceChosen == '1')。这就是比较两个角色的方法。

  3. 第 23、24 和 32 行,大量未使用的变量

    我希望您稍后会使用它们,因为这是不好的做法。

  4. 第 48 行:使用未初始化的变量

    只需在声明后立即将 ptr 初始化为 NULL (ptr = NULL)。

    请注意,您不需要在此处使用结构指针,除非有人要求您这样做。一个简单的结构就可以完成这项工作。

  5. 第 98 行:无关的右大括号

    是的,正如它所说,右大括号太多了。

关于无法让 if 语句/while 循环工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42709372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com