我又来了,今天用C写一个学生的成绩统计遇到的问题,代码如下,问题是如何动态的定义一个结构体变量,因为不确定要输入几个同学的成绩,所以就无法确定有几个结构体变量,知道的小伙伴一定要告知一下
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
struct student
{
char xm[10];
int xh[5];
float yy[3];
float sx[3];
float c[3];
};
int main()
{
int n = 0;
printf("请问有几个学生?");
scanf("%d", &n);
struct student a[100];
for (int i = 0; i < n; i++)
{
printf("请输入第%d位同学的信息.\n", i + 1);
printf("姓名、学号、语文、数学、C语言:");
scanf("%c", &a[i].xm);
scanf("%d", &a[i].xh);
scanf("%f", &a[i].yy);
scanf("%f", &a[i].sx);
scanf("%f", &a[i].c);
}
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
char xm[10];
int xh;
float yy;
float sx;
float c;
} student;
int main()
{
int n = 0;
printf("请问有几个学生?");
scanf("%d", &n);
student *a = (student *)malloc(sizeof(student) * n);
for (int i = 0; i < n; i++)
{
printf("请输入第%d位同学的信息.\n", i + 1);
printf("姓名、学号、语文、数学、C语言:");
scanf("%s", a[i].xm); //字符串不需要加&,用%s
scanf("%d", &a[i].xh);
scanf("%f", &a[i].yy);
scanf("%f", &a[i].sx);
scanf("%f", &a[i].c);
}
return 0;
}
修改处见注释,供参考:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
struct student
{
char xm[10];
int xh; //int xh[5]; 修改
float yy;//float yy[3];
float sx; //float sx[3];
float c;//float c[3];
};
int main()
{
int n = 0;
printf("请问有几个学生?");
scanf("%d", &n);
struct student* a = (struct student*)malloc(sizeof(struct student)*n);//修改
//struct student a[100];
for (int i = 0; i < n; i++)
{
printf("请输入第%d位同学的信息.\n", i + 1);
printf("姓名、学号、语文、数学、C语言:");
scanf("%s", a[i].xm);//scanf("%c", &a[i].xm); 修改
scanf("%d", &a[i].xh);
scanf("%f", &a[i].yy);
scanf("%f", &a[i].sx);
scanf("%f", &a[i].c);
}
printf("姓名、学号、语文、数学、C语言\n");
for (int i = 0; i < n; i++){
printf("%s %d %.2f %.2f %.2f\n",a[i].xm,a[i].xh,a[i].yy,a[i].sx,a[i].c);
}
return 0;
}
已经解决了
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
struct student
{
char xm[10];
int xh;
float yy;
float sx;
float c;
};
int main()
{
int n = 0;
printf("请问有几个学生?");
scanf("%d", &n);
getchar();
struct student a[100];
for (int i = 0; i < n; i++)
{
printf("请输入第%d位同学的信息.\n", i + 1);
printf("姓名、学号、语文、数学、C语言:");
scanf("%s", &a[i].xm);
getchar();
scanf("%d", &a[i].xh);
getchar();
scanf("%f", &a[i].yy);
getchar();
scanf("%f", &a[i].sx);
getchar();
scanf("%f", &a[i].c);
getchar();
}
for (int i = 0; i < n;i++)
{
printf("输出第%d位同学:\n",i+1);
printf("%s\t", a[i].xm);
printf("%d\t", a[i].xh);
printf("%f\t", a[i].yy);
printf("%f\t", a[i].sx);
printf("%f\n", a[i].c);
}
return 0;
}