Программа на C с созданием узлов и пакетов - PullRequest
0 голосов
/ 14 марта 2020

Это оригинальные инструкции программы: https://prnt.sc/rgf0we

Это то, что я сделал до сих пор. Может кто-нибудь помочь мне с тем, почему все узлы выводят одинаковое количество созданных узлов и возвращаемых узлов? Я создал основу для этой программы, но по какой-то причине выходные данные одинаковы для каждого узла.

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

struct node
{
    int data;
    int created, returned, NotReturned;
    struct node *next;
}*node;

void Nodecreated(int createNode);
void CreatePacket(int j);

int main()
{
    int createNode, j;
    j = 100;
    printf("How many node should be made: "); /*askes the user to input how many nodes wants to be created*/
    scanf("%d", &createNode);
    Nodecreated(createNode);
    return 0;
}
/*A function that can create nodes based off of the users input*/
void Nodecreated(int createNode)
{
    struct node *next, *newNode,*temp, *fnNode;
    int num, i;
    /*creates the first node to the linked list*/
    newNode = (struct node *)malloc(sizeof(struct node));
    for(i = 1; i <= createNode; i++)
    {
        /*creates a node and gives it an id which is then transverse to the other nodes*/
        fnNode = (struct node *)malloc(sizeof(struct node));
        fnNode -> data = i;
        printf("----------------------\n");
        printf("node %d\n", i);
        CreatePacket(100);/*A function to create another linked list that will count the packets*/
        next = fnNode -> next;
        temp = next;
    }

}

void CreatePacket(int j)
{
    int totalcreated, totalreturned;
    struct node node1, node2, node3, node4;
    node1.created = 0;
    node1.returned = 0;
    node2.created = 0;
    node2.returned = 0;
    node3.created = 0;
    node3.returned = 0;
    node4.NotReturned = 0;
    /*goes through a loop 100 times and whenever i is a multiples of the 3 it will create a packet*/
    for(int n = 1; n <= j; n++)
    {
        if(n % 2 == 0)
        {
            node1.created = node1.created + 1;
            node1.returned = node1.returned + 1;
        }
        else
        {
            node4.NotReturned = node4.NotReturned + 1;   
        }
        if(n % 3 == 0)
        {
            node2.created = node2.created + 2;
            node2.returned = node2.returned + 2;
        }
        else
        {
            node4.NotReturned = node4.NotReturned + 1;
        }
        if(n % 5 == 0)
        {
            node3.created = node3.created + 3;
            node3.returned = node3.returned + 3;
        }
        else
        {
            node4.NotReturned = node4.NotReturned + 1;  
        }
    }
    /*tally up all the packets created and returned as well as the packets that haven't been created and prints it out*/
    totalreturned = node1.returned + node2.returned + node3.returned;
    totalcreated = node1.created + node2.created + node3.created;
    printf("Packets created: %d\n", totalcreated);
    printf("Packets returned: %d\n", totalreturned);
    printf("Packets left out: %d\n", node4.NotReturned);
    printf("----------------------\n");
}
...