在C中编写一个程序,使用rand()函数创建1000个结构

时间:2018-04-07 17:38:39

标签: c struct linked-list srand

我遇到了这些挑战:

  1. 定义包含4种数据类型的结构
  2. 在C中编写一个程序,使用rand()函数创建这些结构的1000个实例
  3. 将它们插入到链接列表中,并将前10个打印到控制台。
  4. 修改文件code.c中提供的链表代码 所以它适用于插入问题1答案中给出的类型的结构。

    #include <stdio.h>
    #include <stdlib.h>
    #include<malloc.h>
    //#include "users.h"
    
    int i;
    //Stime = srand(time(0));
    
    typedef struct users
    {
    
        int UserID;
        char FullName[50];
        int Age;
        //double Height;
        float Weight;
    }users;
    
    
    typedef struct node
    {
        //Stime = srand(time(0));
        users data;
        struct node *next;
    } node;
    
    
    node* insert(node *ptr, users data)
    {
    
        node *entry = (node*)malloc(sizeof(node));
        //printf("enter the data item\n");
        //scanf("%d",*node-> next);
        if(entry == NULL)
        {
            printf("No Free Memory!\n");
            exit(0);
        }
        else
        {
            entry->data = data;
            entry->next = NULL;
    
            if(ptr == NULL)
            {
                ptr = entry;
            }
            else
            {
                node *temp = ptr;
                while(temp->next != NULL)
                {
                    temp = temp->next;
                }
    
                temp->next = entry;
            }
         }
         return ptr;
    }
    

    /

      

    显然U [i]不是正确的方法。   如果我想拥有独特的构造函数o-n(最大1000)我该怎么做?

    int main()
    {
        int i= 0;
        node *first = NULL;
        srand(time(0));
    
    
     users U[i] = {  
        (U[i].UserID = 600000+rand()% 33331),
        (strcpy( U[i].FullName , "  Nathanial Rivers")),
        (U[i].Age = 18+rand()% 82),
        (U[i].Weight = 40+rand()% 99)
        };
        //users U1 = {600000,"Martin Toomey",19,76.6};
        users U2 = {(U2.UserID = 600000+rand()% 33331),"bob boby",21,77.7};
        users U3 = {600002,"abcdefg ",17,79.1};
        printf(" Name: %s  \n",U1.FullName);
        printf(" User ID: %d \n Age is: %d \n Weight is: %f \n \n",U1.UserID, U1.Age, U1.Weight );
        for (i=0; i<10; i++){
                srand(time(0));
                first = insert(first, U[i]);
                /first = insert(first, U2);
                //first = insert(first, U3);
        //printf(" User ID: %d \n Age is: %d \n Weight is: %f \n \n",U1.UserID, U1.Age, U1.Weight );}
            printf(" User ID: %d \n", U[i].UserID);
            printf(" Age %d \n", U[i].Age);
            printf(" User ID: %d \n", U[i].UserID);
            printf(" Age %d \n", U2.Age);
    }
        //printf(U1);
        first = insert(first, U2);
        //printf(*U2);
        first = insert(first, U3);
    
        return 0;
    }
    

    在main()函数中,我尝试使用rand生成100个唯一用户 我曾经想过,如果我首先有一个打印功能或参数,每次我在循环中首先打电话用C打印用户信息时我不确定是否可能

    关于如何改进我的代码的任何指示非常感谢我知道U1 U2 U3 ....不应该被用作var名称它的坏习惯。

1 个答案:

答案 0 :(得分:2)

您发布的代码中存在许多问题:

  1. JAR File

    • 在行尾缺少分号struct users[] user[i] = new users [100]
    • 使用typedef,您不必通过;
    • 指定类型
    • 如果你想使用数组,你应该在for-loop
    • 之上创建它
    • 在C中,您使用malloc:struct
    • 分配动态内存
  2. user* tmp = malloc(sizeof(user))

    • 分号printf(user)在行尾缺失
    • printf不知道结构的内部结构。因此,您必须将其声明为:;
  3. printf(" User ID: %d \n Age is: %d \n Weight is: %f \n",Nathan.UserID, Nathan.Age, Nathan.Weight );

    • 使用typedef,您不必通过struct users Nathan;指定类型。 请改用struct
  4. 我建议您使用在线资源或书籍,并从更轻松的挑战开始。