Can';t使if语句/while循环工作

Can';t使if语句/while循环工作,c,if-statement,while-loop,C,If Statement,While Loop,无法使if语句/while循环工作。如果我将比赛选为整数,它将永远不允许我进入并选择另一场比赛。当我使用char时,if语句不起作用。我完全不知道该由谁来解决这个问题。如能提供任何协助,将不胜感激 #include<stdio.h> #include<string.h> #include <stdlib.h> #include <time.h> struct player { /*a struct to hold the player inf

无法使if语句/while循环工作。如果我将比赛选为整数,它将永远不允许我进入并选择另一场比赛。当我使用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++;
    }

    }
#包括
#包括
#包括
#包括
struct player{/*保存播放器信息的结构*/
int型[7];
国际名称[12];
智力智能[7];
综合实力[7];
智力魔法技能[7];
[7];;
灵巧度[7];
int生命点[3];
}玩家;
内部主(空)
{
结构播放器*ptr;
srand(时间(空));
整数层,i,j,聪明,运气,力量,灵巧;
智力魔法技能、名称、插槽、x、小山、城市、平地、m、生命点;
寿命点=100;
半消旋体[1];
printf(“请输入您想要的玩家数量”);
scanf(“%d”,&numberPlayers);/*计算玩家数量*/
结构玩家plyr[numberPlayers];
i=0;
而(在南),;
Smartness=rand()%31+70;
printf(“%d\n”,Smartness);
scanf(“%d”和&ptr->Smartness[i]);
运气=兰德()%41+60;
printf(“%d\n”,运气);
scanf(“%d”和&ptr->Luck[i]);
强度=兰特()%50+1;
printf(“%d\n”,强度);/*生成字符*/
扫描频率(“%d”),&ptr->强度[i]);
灵巧度=兰德()%100+1;
printf(“%d\n”,灵巧度);
scanf(“%d”和&ptr->灵巧度[i]);
MagicSkills=rand()%31+50;
printf(“%d\n”,MagicSkills);
scanf(“%d”,&ptr->MagicSkills[i]);
printf(“\n*********\n”);
}
如果(已选择=“1”){
printf(“请输入您的姓名”\n:);
scanf(“%d”,&ptr->name[i]);
Smartness=rand()%31+70;
printf(“%d\n”,Smartness);
scanf(“%d”和&ptr->Smartness[i]);
运气=兰德()%41+60;
printf(“%d\n”,运气);
scanf(“%d”和&ptr->Luck[i]);
强度=兰特()%50+1;
printf(“%d\n”,强度);
扫描频率(“%d”),&ptr->强度[i]);
灵巧度=兰德()%100+1;
printf(“%d\n”,灵巧度);
scanf(“%d”和&ptr->灵巧度[i]);
MagicSkills=rand()%31+50;
printf(“%d\n”,MagicSkills);
scanf(“%d”,&ptr->MagicSkills[i]);
printf(“\n*********\n”);
}
}
i++;
}
}

像这样改变,我希望它对你有用

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

    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'){ //Changed
        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'){ //Changed
        printf("Please enter your name 1\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++;
    }
int main(无效)
{
结构播放器*ptr;
srand(时间(空));
智力i,j,聪明,运气,力量,灵巧;
智力魔法技能、名称、插槽、x、小山、城市、平地、m、生命点;
寿命点=100;
半消旋体[1];
静态int numberPlayers=0;//已更改
printf(“请输入您想要的玩家数量”);
scanf(“%d”,&numberPlayers);/*计算玩家数量*/
结构玩家plyr[numberPlayers];
i=0;
而(在南),;
Smartness=rand()%31+70;
printf(“%d\n”,Smartness);
scanf(“%d”和&ptr->Smartness[i]);
运气=兰德()%41+60;
printf(“%d\n”,运气);
scanf(“%d”和&ptr->Luck[i]);
强度=兰特()%50+1;
printf(“%d\n”,强度);/*生成字符*/
扫描频率(“%d”),&ptr->强度[i]);
灵巧度=兰德()%100+1;
printf(“%d\n”,灵巧度);
scanf(“%d”和&ptr->灵巧度[i]);
MagicSkills=rand()%31+50;
printf(“%d\n”,MagicSkills);
scanf(“%d”,&ptr->MagicSkills[i]);
printf(“\n*********\n”);
}
如果(*已选择=='1'){//已更改
printf(“请输入您的姓名1\n:”);
scanf(“%d”,&ptr->name[i]);
Smartness=rand()%31+70;
printf(“%d\n”,Smartness);
scanf(“%d”和&ptr->Smartness[i]);
运气=兰德()%41+60;
printf(“%d\n”,运气);
scanf(“%d”和&ptr->Luck[i]);
强度=兰特()%50+1;
printf(“%d\n”,强度);
扫描频率(“%d”),&ptr->强度[i]);
灵巧度=兰德()%100+1;
printf(“%d\n”,灵巧度);
scanf(“%d”和&ptr->灵巧度[i]);
MagicSkills=rand()%31+50;
printf(“%d\n”,MagicSkills);
scanf(“%d”,&ptr->MagicSkills[i]);
printf(“\n*********\n”);
}
}
i++;
}

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

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

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

    标准输入只需要一个字符,所以不需要字符串数组(char*),只需使用字符变量(char)

    因此,
    char raceselected[1]
    变成了
    char raceselected

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

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

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

    因此,if语句变成
    if(raceSelected=='0')
    if(raceSelected=='1')
    。这是比较两个字符的方式

  • 第23、24和32行有很多未使用的变量

    我希望你以后能用上,因为这是一个坏习惯

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

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

    注意,这里不需要使用指向struct的指针,除非您被要求这样做。一个简单的结构就可以完成这项工作

  • 第98行:外部闭合撑杆

    是的,正如上面所说,结束括号太多了


  • 在您的代码中需要考虑两个主要方面,让我们逐一更正它们:

  • char[1];这里您声明了一个大小为1的charecter数组

    scanf(" %c",&raceChosen); if (raceChosen == "0")
        if (raceChosen == "0")
    
           (char)       (string)
    
       if (raceChosen == '0')
    
            char         char