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字节),它可以防止缓冲区溢出。