已定义结构体,输入的时候到字符型sex的时候就不能输入了,字符显示不出来,过一会程序就自动结束,觉得是输入函数和下面的那个循环的问题,但找不到。

struct student* p1, * p2, * head;   //定义结构体变量

head=p1 = p2 = (struct student*)malloc(sizeof(struct student)); //开辟存储空间

scanf_s("%ld%s%c%d", &p1->num, p1->name, &p1->sex, &p1->age);   //输入相关数据

while (p1->num != 0)        // 如果输入的学号num为0则停止输入,表明输入结束
{
    i = i + 1;
    if (i == 1)
        head = p1;
    else
        p2->next = p1;
    p2 = p1;
    p1 = (struct student*)malloc(sizeof(struct student));   //强制类型转换(struct student*)
    scanf_s("%ld%s%c%d", &p1->num, p1->name, &p1->sex, &p1->age);
}   /*23至35行有问题,程序无法执行下去*/

p2->next = NULL;
free(p1);  //释放多余的存储空间

struct student* p3, * p4;

if (head != NULL)
{
    p3 = head;
    for (int j = 1; j <= i; j++)
    {
        printf("%ld,%s,%c,%d\n", p3->num, p3->name, p3->sex, p3->age);
        p3 = p3->next;
    }  //打印选择之前的链表
}
else
    printf("The linklist is not exist\n");


int age;

scanf_s("%d", &age);  //输入要删除的元素

seek(age,head);   //对输入的元素进行选择

if (head != NULL)
{
    p4 = head;
    while (p4 != NULL)
    {
        printf("%ld,%s,%c,%d\n", p4->num, p4->name, p4->sex, p4->age);
        p4 = p4->next;
    }
}  //打印选择过后的链表



    if (pt != NULL)
    {
        if (pt->age == age)
        {
            temp = pt;
            pt = pt->next;
            free(temp);
            return;
        }  //先判断头结点
        else
        {
            for (n = 2; n <= i; i++)
            {
                if (pt->next->age != age)
                    pt = pt->next;
                else
                {
                    temp = pt->next;
                    pt->next = pt->next->next;
                    free(temp);
                    return;
                }
            }
        }
    }
    else
        printf("error\n");

} //定义选择函数seek

两句输入scanf_s()语句修改下,供参考:

scanf_s("%ld%s%c%d", &p1->num, p1->name, 16, &p1->sex,1, &p1->age); 

img