如何将struct数组值移动到一个结构

时间:2017-11-12 16:55:51

标签: c struct

我想用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);
            }

    }
}

1 个答案:

答案 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);
    }
}

}