我对C很新。我正在做一些事情,但我无法解决这个问题。
我从该程序的副本中删除了很多内容以缩小问题范围。 我想知道为什么它会一直崩溃并且提示得到赞赏。 感谢。
#include<stdio.h>
main()
{
char *name;
printf("\nName your pet.\n");
scanf("%s", name);
int hunger = 5;
int time = 0;
int loop = 0;
int day = 1;
int happiness = 40;
int health = 100;
int tired = 0;
int option;
while(loop < 1){
printf("\n\nDay %i\ntime = %i\n\n",day,time);
printf("1 - check\n2 - interact\n3 - go out\n4 - inventory\n\n");
scanf("\n%i",&option);
if (option == 1) {
if (tired >= 90){
printf("\n %s is struggling to stay awake", name);
}
else if (tired >= 75){
printf("\n %s looks really tired", name);
}
else if (tired >= 50){
printf("\n %s is starting to seem a little sleepy", name);
}
else if ((tired <= 10)&&(hunger < 50)){
printf("\n %s is full of energy", name);
}
time = time - 1;
}
time = time + 1;
if (10<=time){
day = day + 1;
time = 0;
tired = 0;
printf("Goodnight!/n");
}
}
}
答案 0 :(得分:1)
此行崩溃:scanf("%s", name);
,因为name
未初始化,因此您无法将其传递给scanf
。
初始化name
,例如像这样:char *name = malloc(sizeof(char) * 20);
,所以现在一个包含20个字符的字符串适合name
。
答案 1 :(得分:0)
在您的代码中,name
是char*
,这意味着它是指向char
的指针。由于您没有分配内存或为指针指定了有效地址,因此它指向某个未知位置。写入此位置是导致崩溃的原因。
要解决此问题,请更改
char *name;
要
char name[100];
或者使用malloc
作为suggested by @returntrue动态分配内存。