C代码崩溃(不知道为什么)

C代码崩溃(不知道为什么),c,C,基本上,我是一名初学者,我写的是: #include <stdio.h> #include <stdlib.h> int main() { system("COLOR 0A"); char playerName[13]; char playerGender; int playerAge; printf("Please input your name and age!\nName: "); scanf("%s", playerName); printf("Age (f

基本上,我是一名初学者,我写的是:

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

int main()
{
system("COLOR 0A");

char playerName[13];
char playerGender;
int playerAge;

printf("Please input your name and age!\nName: ");
scanf("%s", playerName);
printf("Age (from 18 to 50): ");
scanf("%d", &playerAge);

label:
if(playerAge > 18 && playerAge < 50)
{

    printf("What gender are you, M(male) or F(female): ");
    scanf("%c", playerGender);

    gender:
    if(playerGender == 'M' || playerGender == 'F'){

        printf("Okay, so your name is %s, you're %d years old and you're a %s.", playerName, playerAge, playerGender);
    }else{
        printf("Try again.\n\n"
           "What gender are you, M(male) or F(female): ");
           scanf("%c", playerGender);
           goto gender;
    }
}else{

        printf("Wrong, try again.\n"
               "Age (from 18 to 50): ");
        scanf("%d", &playerAge);
        goto label;
}


return 0;
}
#包括
#包括
int main()
{
系统(“颜色0A”);
charplayername[13];
char playerGender;
国际游戏规则;
printf(“请输入您的姓名和年龄!\n姓名:”;
scanf(“%s”,playerName);
printf(“年龄(从18岁到50岁):”;
scanf(“%d”和playerAge);
标签:
如果(播放时间>18和播放时间<50)
{
printf(“你是什么性别,M(男性)还是F(女性):”;
scanf(“%c”,playerGender);
性别:
如果(playerGender=='M'| | playerGender=='F'){
printf(“好的,你的名字是%s,你是%d岁,你是%s.”,playerName,playerAge,playerGender);
}否则{
printf(“重试。\n\n”
“你是什么性别,M(男性)还是F(女性):”;
scanf(“%c”,playerGender);
后藤性别;
}
}否则{
printf(“错误,请重试。\n”
“年龄(18岁至50岁):”;
scanf(“%d”和playerAge);
后藤标签;
}
返回0;
}
当我将所需的年龄设置为继续时,
playerGender
scanf
会崩溃。就在它告诉我关于我性别的问题之后?我的错在哪里?

试试:

scanf("%c", &playerGender);
而不是

scanf("%c", playerGender);

因为scanf是一个指针,而不是对您试图填充的变量的引用。

我也是初学者,但我认为您需要编写这个
scanf(“%s”,playerName)像这样
scanf(“%12s”,playerName)


顺便说一句,让我知道这是否有效。

主要问题是使用
scanf
进行用户输入。即使您是初学者,您也应该具备常识,包括完整的程序及其行为描述。这很好!学习不要从一开始就使用goto。@melpomene不一定,您可以指定
%s
的宽度,例如:
%15s
@szczurcio这并不能解决主要问题,即使用
scanf
。这仅明确告诉
scanf
,要获取的字符串由12个字符组成。如果用户输入超出了存储的数组长度(12字节),它可以防止缓冲区溢出。