我想用realloc(内存分配器)记录我的一些关于struct的学生信息。当我尝试解决这个问题时;我将按给定的id对数据进行排序,但每个id都有一些关于whoose id的学生的其他信息。我通过id对结构进行排序,但当ı将每个数据移动到另一个数据编译器时不要这样做。你能帮帮我吗?注意:我并不是要将struct移动到另一个struct.I只想将strcut数组的一个元素值移动到另一个数组元素值或更改有序数据的theese数据位置
#include <string.h>
#include <stdlib.h>
typedef struct {
int id;
char name[10];
char surname[10];
double quiz1;
double quiz2;
double quiz3;
double midterm;
double finall;
}STUDENT;
int indis = 0;
void swapInt(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void swapDouble(double *a, double *b)
{
double temp = *a;
*a = *b;
*b = temp;
}
void str_swap(char const ** str1, char const ** str2)
{
char const *temp = *str1;
*str1 = *str2;
*str2 = temp;
}
void sortSt(STUDENT *st) {
int i, j, min;
for (i = 0; i < indis - 1; i++) {
min = i;
for (j = i + 1; j < indis; j++)
if (st[j].id < st[min].id) {
min = j;
// Swap the found minimum element with the first element
memcpy()
swapInt(&st[min].id, &st[i].id);
str_swap(&st[min].name, &st[i].name);
swapChar(st[min].surname, st[i].surname);
swapDouble(&st[min].quiz1, &st[i].quiz1);
swapDouble(&st[min].quiz2, &st[i].quiz2);
swapDouble(&st[min].quiz3, &st[i].quiz3);
swapDouble(&st[min].midterm, &st[i].midterm);
swapDouble(&st[min].finall, &st[i].finall);
}
}
}
答案 0 :(得分:0)
我向T.A.问了这个问题。他回答但解决方案非常简单:) 像这样;
void removeStudent(STUDENT *st , int numberOfStudent) {
int id;
printf("Please enter id for remove student \n");
scanf("%d", &id);
for (int i = 0; i < indis; i++)
{
if (st[i].id == id) {
st[i] = st[numberOfStudent]; // this is exactly answer
printf("%d id's student removed \n", id);
break;
}
else if(i==indis) {
printf("%d id's student not found \n ",id);
}
}
}