使用循环链表的时钟问题

时间:2014-11-05 10:32:46

标签: c pointers linked-list circular-list

所以我得到了这项关于制作数字时钟的工作。 用户设置点头的数量,每个点头等于1 / n秒,N是用户点头的点数。之后我被叫做3个指针:

  • 一秒钟
  • 一分钟
  • 一个小时

Seconds指针必须运行循环链接中的所有点头。对于完整旋转,分钟的指针应该开始移动到下一个节点,并且在分钟指针总共60次移动之后,小时指针应该紧跟在之后。 时钟需要做以下事情:

  1. 用户可以将时钟设置回零:00:00:00;

  2. 用户可以精确设置秒钟。

  3. 程序需要在每次活动后显示时钟。

  4. 用户可以为闹钟编程时钟,其中时钟向用户显示消息。

  5. 它需要找到它的指针(在时钟而不是程序上)对齐的下一个小时(例如:12:00,01:05,02:10,03:15等)

  6. 在释放我们列表中使用的任何内存后,它完成了程序。
  7. 这是我的代码,但我遇到了一些困难。

    #include<stdio.h>
    #include<stdlib.h>
    int counter=0;
    typedef struct Node 
    {
        int data;
        struct Node *next;
    }node;
    
    void insert(node *pointer, int data)
    {
        node *start = pointer;
        /* Iterate through the list till we encounter the last node.*/
        while(pointer->next!=start)
        {
            pointer = pointer -> next;
        }
        /* Allocate memory for the new node and put data in it.*/
    
        pointer->next = (node *)malloc(sizeof(node));
        pointer = pointer->next;
        pointer->data = data;
        pointer->next = start;
    } 
    
    void print(node *start,node *pointer)
    {
        if(pointer==start)
        {
                return;
        }
        printf("%d ",pointer->data);
        print(start,pointer->next);
    }
    
    int main()
    {
        /* start always points to the first node of the linked list.
           temp is used to point to the last node of the linked list.*/
        node *start,*temp;
        start = (node *)malloc(sizeof(node)); 
        temp = start;
        temp -> next = start;
        /* Here in this code, we take the first node as a dummy node.
           The first node does not contain data, but it used because to avoid handling special cases
           in insert and delete functions.
         */
        node *sec,*min,*hour;
        int v,c,n;
        printf("1. Insert N\n");
        printf("2. Make Time Zero\n");
        printf("3. Set Clock\n");    
        int query;
        scanf("%d",&query);
        if(query==1)
        {
            int data,i,n;
            printf("Posa n thes\n");
            scanf("%d",&n);
            for (i = 0; i < 60*n; i++)
            {    
                data = i;
                insert(start,data);
                printf("%d\n",i);
            }
    
            node *sec_copy;
            sec_copy=start;
            min=start;
            hour=start;
    
            while(n>0)
            {    
                sec_copy=sec_copy->next;
                n--;
                c++;
                if(c == 59*n)
                {
                    min=min->next;
                    c=0;
                    v++;
                }
                if(v == 60)
                {
                    hour=hour->next;
                    v=0;
                }
            } 
        }
    
        printf("%d",sec->data);
        if(query==2)
        {    
            int timer;
            timer=0;
            printf("%.2d:%.2d:%.2d",timer,timer,timer);
    
        }
        if(query==3)
        {
            int h,m,s;
            printf("Set me hours");
            scanf("%d",&h);
            h = h%24;
            printf("Set me min");
            scanf("%d",&m);
            h = h+m/60;
            m = m%60;
            printf("Set me secs");
            scanf("%d",&s);
            h = h + s/3600;
            m = m + s%3600;
            s = s%60;
        }
     }
    

1 个答案:

答案 0 :(得分:0)

正如Jochaim Pileborg指出你真的需要使用调试器。

我看到的段错误的唯一原因是您在未初始化printf("%d",sec->data);的情况下致电:sec
你也没有初始化&#39; v&#39;和&#39; c&#39;,并且有两个&#39; n&#39;解决方案中的变量。