| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 651 人关注过本帖
标题:帮我看看奇怪的错误
取消只看楼主 加入收藏
liqingyulipeng
Rank: 1
等 级:新手上路
帖 子:63
专家分:3
注 册:2008-10-11
结帖率:77.78%
收藏
 问题点数:0 回复次数:1 
帮我看看奇怪的错误
题目是:若干个人(在下面的程序中人数是people_sum,由用户输入)围成一圈,每个人有一个编号(从1到people_sum)。从第一个人开始报数,数到某个固定的数(在下面程序中为用宏定义的NUM_TO_OUT)时,此人就退出圈外,然后下一个人右从1开始报数,数到那个固定的数的人又退出……周而复始,直到只剩下一个人,要求打印出最后那个人的号数 。
    问题:下面我给出的程序的运行结果经过若干次测试都是正确的,但是如果将我注释的“怪事就在这里出现的”那段程序改成:
        if(counter%NUM_TO_OUT == 0)//数到三时就移除结点(让该人退出圈外)
        {        
                current = current->next;
                front->next = current;
        }
        结果就会出错。真是让我百思不得其解!!请高手指点迷津……

#include <stdio.h>
#include <malloc.h>
#define NUM_TO_OUT 3
typedef struct S_PEOPLE
{
    int number;
    struct S_PEOPLE *next;
}S_PEOPLE;
int main(int argc,char *argv[])
{
    S_PEOPLE *head = NewNode();
    S_PEOPLE *current = head;
    S_PEOPLE *front = head;
    int people_sum;
    int i = 0;
    int counter = 1;
    printf("please input the sum of people:\n");
    scanf("%d",&people_sum);
    head->number = 1;
    for(i=1; i<people_sum; i++)
    {        
        current->next = NewNode();
        current = current->next;
        current->number = i+1;//为每个结点编一个号码
    }
    current->next = head;//使首尾相连

    current = front->next;
    while(current->number != front->number)
    {
        counter++;
/********************怪事就在这里出现********************/
        if(counter%NUM_TO_OUT == 0)//数到三时就移除结点(让该人退出圈外)
        {        
            RemoveNode(front,current);
        }
/********************************************************/
        front = current;
        current = current->next;        
    }
    printf("the last people is number %d\n",current->number);//打印最后出圈的那个人的号数
    return 0;
}

S_PEOPLE *NewNode(void)
{
    S_PEOPLE *node = (S_PEOPLE *)malloc(sizeof(S_PEOPLE));
    return node;
}
void RemoveNode(S_PEOPLE *front, S_PEOPLE *current)//移除结点
{
    current = current->next;
    front->next = current;
}
搜索更多相关主题的帖子: 链表 怪事 函数 
2008-12-13 10:49
liqingyulipeng
Rank: 1
等 级:新手上路
帖 子:63
专家分:3
注 册:2008-10-11
收藏
得分:0 
哈哈?没人知道啊?
我自己想通了
2008-12-16 15:06
快速回复:帮我看看奇怪的错误
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047119 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved