victor hsu 1B Ответов: 1

Почему мой Мэллок ошибается


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct rec
{
    char nam[20];
    float grd;
    int id;
    struct rec *next;
};

struct rec head;
char xnam[20];
int xid;
float xgrd;


int read(struct rec happy[]);
void sort(struct rec sad[], int c );
int compare(char *ap, char *bp);
void swap( struct rec fish[], int w);

int main()
{
    struct rec what[20];
    int i=0, no=0;

    no = read(what);
    sort(what, no);

    getchar() ;
    return 0;
}


int read(struct rec info[])
{
    int l=0;

    FILE *myFile;
    myFile = fopen("student.txt", "r");


    printf("List Unsorted:\n");

    struct rec *tp;
    tp=&head;
    while (fscanf(head,"%s,%d,%f",xnam,&xgrd,&xid),myFile)
    {
        tp->next=struct rec malloc (sizeof struct rec);
        tp=tp->next;
        strcpy(tp->nam,xnam);
        tp->id=xid;
        tp->grd=xgrd;
        tp->next=NULL;
    }

    tp=head.next;
    while(head.next!=NULL)
    {
        printf("%s,%d,%f",tp->nam,tp->grd,tp->id);
    }
    fclose(myFile);

    return l;

}


int compare(char *ap, char *bp)
{
    int x = 0;
    while (ap[x] == bp[x] && ap[x] != '\0')
        x=x+1;

    if (ap[x] > bp[x])
        return 1;
    else if (ap[x] < bp[x])
        return -1;
    else
        return 0;
}


void swap( struct rec fish[], int w)
{
    int q;

    struct rec temp;

    q=compare (fish[w].nam, fish[w+1].nam);
    if (q>0)
    {
        temp = fish[w];
        fish[w] = fish[w+1];
        fish[w+1] = temp;
    }
}


void sort(struct rec cat[], int k)
{
    int y, z, c;

    for (y=0; y<k-1; y=y+1)
    {

        for (z=0; y+z<k-1; z=z+1)
        {
            swap(cat, z);
        }

    }
    printf("\nNew List\n\n");

    for (c=0; c<k; c=c+1)
    {
        printf("%s\t %d %.2f", cat[c].nam, cat[c].id, cat[c].grd);
        printf("\n");
    }
}


Что я уже пробовал:

я использую отладчик, но ничего не происходит

1 Ответов

Рейтинг:
1

CPallini

Цитата:
ТП-&ГТ;следующий=структура отдых Танос (оператор sizeof структуры отдых);
Должно быть
tp->next=(struct rec *) malloc (sizeof (struct rec));