#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); } }
修改了一下,现在这个代码是没问题的。如果你有看不懂的地方可以继续问~
#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);