Как вставить структуру в узел LinkedList с помощью C? - PullRequest
0 голосов
/ 02 мая 2018

, поэтому я пытаюсь ввести информацию об ученике, включая имя, фамилию, счет и почтовый индекс, в один узел. После этого я смогу вставить информацию о другом ученике в следующий узел и т. Д. И получить к ним доступ.

Часть, с которой у меня возникают проблемы - это добавление фамилии, счета и почтового индекса в узел. Если кто-то может помочь, я был бы очень признателен. Возможно, это что-то действительно простое, но я просто не знаю как.

Вы можете увидеть, как проблема возникает в функции вставки. Я могу вставить имя, но не фамилию. Что-то может быть не так с моими основами, но если это так, просто дайте мне знать.

Спасибо.

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

/* inserting nodes at the END of a linked list */

void Insert(char *f, char *l, float s, char *z);
void Print();

struct node
{
    struct Student *now;
    struct node *next;
};

struct node *head; /* it will be created in the GLOBAL region of the memory */
struct node *tail = NULL;

struct Student {
    char firstname[20];
    char lastname[20];
    float score;
    char zip[20];
};


int main()
{
    //int i,n,x;
    //int x;
    head = NULL;

    char first[20];
    char last[20];
    float score;
    char zip[20];



    printf("\nPlease input records of students: ");

    printf("\nFirst name: ");
    scanf("%s", first);

    printf("\nLast name: ");
    scanf("%s", last);

    printf("\nScore: ");
    scanf("%f", &score);

    printf("\nZip code: ");
    scanf("%s", zip);

    printf("\n------ This is the Print records function so far: \n\n");
    Insert(first, last, score, zip);

    Print();

    return 0;
}

void Insert(char *f, char *l, float s, char *z)
{
    struct node *temp = (struct node*) malloc(sizeof(struct node));

    temp->now=f;

    // Problem: how do I insert the other variables (last, score, zip) into a student structure and into node?
    //temp->now.lastname =l; //Doesn't work
    temp->next=NULL;

    if (head == NULL)
    {
        head=temp;
        tail=temp;
        return;
    }
    tail->next=temp;
    tail=temp;
}

void Delete(int n)
{
    struct node* temp1 = head;
    int i;

    if (n==1)
    {

        head = temp1->next; /*head now points to the second node */

        free(temp1);

        return;

    }

    for(i=0; i<n-2; i++)
        temp1=temp1->next; /* temp1 points to (n-1)th node */
    struct node* temp2 = temp1->next; /* nth node */
    temp1->next = temp2->next; /*(n+1)th node */
    free(temp2); /* delete temp2 */
}

void Print()
{
    struct node* temp = (struct node*) malloc(sizeof(struct node));
    temp = head;

    while (temp!=NULL)
    {
        printf("%s ",temp->now);
        temp = temp->next;
    }

    printf("\n");
}

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Внутри узла связанного списка у вас есть еще один указатель на STRUCT, поэтому сначала вам нужно выделить память для этого.

temp->now = (struct Student *) malloc(sizeof(struct Student));

Теперь вы можете получить доступ к отдельным полям и обновлять их соответствующим образом. strncpy(temp->now.firstname, f, sizeof(temp->now.firstname));

strncpy(temp->now.lastname, f, sizeof(temp->now.lastname));
temp->now.score = s;
0 голосов
/ 02 мая 2018

Вы присваиваете temp->now несовместимому указателю f, я думаю, компилятор жаловался на это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...