同学们帮我看看为什么学生管理系统性别输入不了呀哪里错了

#include #include void inputstudent(struct studentp); void outstudent(struct studentp); struct student { char name[100]; float score; char sex; }; void main() { int len; printf("请输入共有多少学生"); scanf_s("%d", &len); struct student st; inputstudent(&st,len); outstudent(&st,len); } void inputstudent(struct student p,int len) { int i; p = (struct student)malloc(len * sizeof(struct student)); for (i = 0; i < len; i++) { printf("请输入%d学生信息\n",i+1); printf("请输入第%d学生的姓名\n",i+1); scanf_s("%s",p[i].name,100); printf("请输入第%d学生的成绩\n",i+1); scanf_s("%f", &p[i].score); printf("请输入第%d学生的性别\n",i+1); scanf_s("%c/n", &p[i].sex,1); //getchar(p[i].sex); } free(p); } void outstudent(struct student *p,int j) { int i; for (i = 0; i < j; i++) { printf("第%d学生信息", i + 1); printf("第%d学生的姓名;%s\n",*p->name); printf("第%d学生的成绩;%f\n", *p->score); printf("第%d学生的性别;%c\n", *p->sex); } }

img

img

img

img

img

修改了一下,现在这个代码是没问题的。如果你有看不懂的地方可以继续问~


#include <stdio.h>
//#include<malloc.h>
#include <stdlib.h>
struct student
{
    char name[20];
    float score;
    char sex[5];
};
void inputstudent(struct student* pc, int len)
{
    int i;
    //换个指针变量名pc
    //函数里面创建的动态内存空间无法给main函数里面的p用
    //pc = (struct student*)malloc(len * sizeof(struct student));
    for (i = 0; i <len; i++)
    {
        printf("请输入%d学生信息\n", i+1 );
        printf("请输入第%d学生的姓名>", i + 1);
        scanf("%s", pc[i].name);
        printf("请输入第%d学生的成绩>", i + 1);
        scanf("%f", &pc[i].score);
        printf("请输入第%d学生的性别>", i + 1);
        scanf("%s", pc[i].sex);
        //getchar(p[i].sex);
    }
    printf("输入完成\n");
    
}

void outstudent(struct student* p, int len)
{
    int i;
    for (i = 0; i < len; i++)
    {
        printf("第%d学生信息\n", i + 1);
        printf("第%d学生的姓名:%s\n", i + 1, p[i].name);
        printf("第%d学生的成绩:%.2f\n", i + 1, p[i].score);
        printf("第%d学生的性别:%s\n", i + 1, p[i].sex);
    }
    free(p);
}

int main()
{
    int len;
    printf("请输入共有多少学生>");
    scanf("%d", &len);
    struct student st;
    struct student* p = &st;
    p = (struct student*)malloc(len * sizeof(struct student));

    inputstudent(p, len);
    outstudent(p, len);

    return 0;
}

点个采纳呗~

修改见注释,供参考:

#include <stdio.h>
#include <malloc.h>
struct student
{
    char  name[100];
    float score;
    char  sex;
};
void input_student(struct student *, int);  //void inputstudent(struct studentp);
void out_student(struct student *, int);   //void out_student(struct studentp);
int  main()
{
    int len;
    printf("请输入共有多少学生");
    scanf_s("%d", &len);
    struct student* st = (struct student*)malloc(sizeof(struct student) * len);//修改
    input_student(st, len);  //修改
    out_student(st, len);    //修改
    return 0;
}
void input_student(struct student* p, int len)
{
    int i;
    //p = (struct student*)malloc(len * sizeof(struct student));
    for (i = 0; i < len; i++)
    {
        printf("请输入%d学生信息\n", i + 1);
        printf("请输入第%d学生的姓名\n", i + 1);
        getchar();                        //修改
        scanf_s("%s", p[i].name, 100);
        printf("请输入第%d学生的成绩\n", i + 1);
        scanf_s("%f", &p[i].score);
        printf("请输入第%d学生的性别\n", i + 1);
        getchar();                        //修改
        scanf_s(" %c", &p[i].sex, 1);      //scanf_s("%c/n", &p[i].sex, 1);
        //getchar(p[i].sex);
    }
        //free(p);
}
void out_student(struct student* p, int j)
{
    int i;
    for (i = 0; i < j; i++, p++)  //for (i = 0; i < j; i++)
    {
        printf("第%d学生信息:", i + 1);
        printf("第%d学生的姓名;%s\n",i+1, p->name);//printf("第%d学生的姓名;%s\n", *p->name);
        printf("第%d学生的成绩;%f\n",i+1, p->score);//printf("第%d学生的成绩;%f\n", *p->score);
        printf("第%d学生的性别;%c\n",i+1, p->sex); //printf("第%d学生的性别;%c\n", *p->sex);
    }
}

把那行改为scanf_s("%c", &p[i].sex, 1);