Изменить значение объекта TypeDef, уже созданного в C - PullRequest
0 голосов
/ 13 января 2020

Редактировать: Проблема решена!

l Проблема не в том, что мой strcpy не работал, а вместо этого печать

l должна была быть выполнена ВНУТРИ этой функции. За пределами этого мой массив был таким же.

l (Возможно, из-за того, что strcpy работает со ссылками, но я действительно не знаю)

l Мораль - если вы хотите напечатать свои строковые массивы после strcpy , сделайте это в

l той же функции strcpy. :)

l ----------------------------------------- -------------------

Оригинальный пост:

У меня есть простой проект TypeDef Struct в C (code :: blocks) ):

    typedef struct
    {
        char name[150];

        int studentNumber, present;

    } TypeStudent;



    typedef struct
    {
        TypeStudent students[MAX_STUDENTS];

        int qtdStudents;

    } TypeStudentsList;






    void getStudents (TypeStudent * refStudent)
    {

        fflush(stdin);

        printf("Insert name: ");

        gets(refStudent->name);

        fflush(stdin);

        printf("Insert student number: ");

        scanf ("%d", &refStudent->studentNumber);

        fflush(stdin);

        printf("Insert presence number: ");

        scanf("%d",&refStudent->present);

    }


    void NameOrder (TypeStudentList list)
    {

        BubbleOrder(list, MAX_STUDENTS);

        printf("\n\nStudents\n");
        for(i=0; i<lista.qtdStudents; i++) {
            printf("%s\n",lista.alunos[i].nome);
        }
    }



     void BubbleOrder(TypeStudentList, int n) {
        int i, trades;
        char aux[150];

        do {
            trades=0;
            for(i=0; i<n-1; i++) {
                if(strcmpi(list.students[i].name , lista.students[i+1].name) > 0){

                    strcpy(aux , list.students[i].name);
                    strcpy(list.students[i].name , list.students[i+1].name);
                    strcpy(list.students[i+1].name , aux);
                    trades=1;
                }
            }
        } while (trades!=0);
    }

Как вы можете видеть, мой проект начинается с пустого списка студентов, и с некоторыми «получателями» он настроит некоторых студентов, затем мне нужно будет оформить заказ по простому пузырьковому порядку.

Проблемы:

1 - Мой cmd падает, когда достигает части заказа. Я что-то неправильно настроил?

2- Правильно ли этот синтаксис? (игнорируйте i вне контекста)

            strcpy(aux , list.students[i].name);
            strcpy(list.students[i].name , list.students[i+1].name);
            strcpy(list.students[i+1].name , aux);

3 - Как правильно установить значение list.student [0] .name ПОСЛЕ получения правильно?

-

Уже пробовал:

Печать list.students [0] .name после get работает правильно (так что я полагаю, проблема в моем синтаксисе BubbleOrder)

Любая помощь приветствуется, спасибо!

...