| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 717 人关注过本帖
标题:小弟是菜鸟,高手帮帮忙,c语言编程遇到问题
取消只看楼主 加入收藏
yourcandy
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-6-1
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:2 
小弟是菜鸟,高手帮帮忙,c语言编程遇到问题
问题是这样的:
投票程序:
1,使用链表实现统计
2,每次输入一个候选人字符串名字和一个整形票数
3,如果之前已经有改候选人名字,则累加票数,否则创建新的候选人
4,如果候选人新增票数为-1,则暂时删除该候选人
5,投票结束后打印所有候选人及其票数
6,要特别注意删除链表头结点位置候选人的情况


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LENTH (20)
typedef struct Node
{
        char name[LENTH];
        int num;
        struct Node *next;
}node;


//定义删除函数
node *dele(node *head, node *p)                                //要删除p这个结点
{
        node *q = NULL;
        if(p==head)                                //如果要删除的为头结点
        {
                q=head;
                head=head->next;                                //将头结点的下一结点置为头结点
                free(q);                                                //释放原来的头结点的内存
        }
        q->next = p;                                                //结点q是p的前结点
        if(p!=head)
        {
                q->next = p->next;
                free(p);
        }
        return head;
}
//定义增加链表长度函数
int add(node *head,char name[LENTH],int num)
{
        node *q = head ,*p = NULL;
        
        while(q->next)                                //找到链表的尾结点
                q=q->next;
        q->next=p;                                        //在链表末尾插入新结点
        strcpy(p->name,name);
        p->num=num;
        p->next=NULL;
        return 0;
}

//定义查找函数
int find(node *head,char name[LENTH],int num)
{
        node *p = NULL,*q = NULL;
        p = head;                                                                //p指向头结点,从头结点开始找
        while(p!=NULL&&p->name!=name)                        //查找姓名为name的候选人,如果当前结点不是要找的结点
                p = p->next;                                                //指针指向下一结点
        if(p->name==name)                                                // 如果找到该候选人的名字
        {
                if(-1!=num)
                        p->num+=num;                                                //则增加相应的票数
                return 1;                                                               
                if(-1==num)
                {                                                                                        //调用删除函数
                        dele(head,p);
                        
                }                                                                                       
        }
        if(p==NULL)
        {
                add(head,name ,num);                                                //调用增加链表长度函数
        }
}
void main()
{
        node *head=NULL, *p=NULL, *q=NULL;
        int i = 0, j = 0;
        while(1)
        {
                printf("输入1投票,输入0结束投票\n");
                scanf("%d",&j);
                if(j==1)
                {
                        q=(node *)malloc(sizeof(node));                                //分配一个新结点空间
                        printf("请输入的候选人的名字和票数:\n");
                        scanf("%s %d",q->name,&q->num);
                        q->next = NULL;                                                                //新结点指针域指向空
                        if(NULL==head)
                        {
                                head = q;
                        
                        }
                        else
                        {
                        
                                i =        find(head, q->name,q->num);
                        
                                if(i == 1)
                                        free(q);
                        }
                }
                else
                        break;
        }
               
        printf("最后结果为:\n");
        for(p=head;p;p=p->next)
                printf("%s %d\n",p->name,p->num);
        while(head)
        {
                p=head;
                head = head->next;
                free(p);
        }
        
}


我在输入张三 1,然后再输入一个名字和票数时就跳出问题了,我在strcpy处设置了断点检查,发现p->name还是没考配进去,求高手帮忙

搜索更多相关主题的帖子: c语言 
2010-08-03 11:02
yourcandy
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-6-1
收藏
得分:0 
回复 4楼 erikyo
楼上犀利,小弟刚学c语言,能告诉我qq号吗?让我多膜拜膜拜
2010-08-03 16:33
yourcandy
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-6-1
收藏
得分:0 
回复 6楼 erikyo
在查找函数中为什么head要定义成**head啊
2010-08-03 20:27
快速回复:小弟是菜鸟,高手帮帮忙,c语言编程遇到问题
数据加载中...
 
   



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

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