| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 449 人关注过本帖
标题:结构体链表问题
只看楼主 加入收藏
孤独一生
Rank: 2
来 自:四川达县
等 级:论坛游民
帖 子:45
专家分:55
注 册:2013-4-1
结帖率:56.25%
收藏
 问题点数:0 回复次数:0 
结构体链表问题
typedef struct record
{
    char name[15];   
    char tel[15];   
    char address[50];
};
typedef struct node
{
    struct record data;
    struct node *next;
}Node;   
void insert(Node*l)            
{
    Node*p=NULL;            
    Node*r=l->next;         
    char ch=0;               
    char name[15],tel[15],adr[50];        
    while(1)
    {
        printf("输入姓名:");
        fgets(name,15,stdin);            
        rewind(stdin);                    
        DelN(name);                       
        printf("输入电话号码:");
        fgets(tel,15,stdin);            
        rewind(stdin);
        DelN(tel);
        printf("输入地址:");
        fgets(adr,50,stdin);              
        rewind(stdin);
        DelN(adr);
        p=(Node*)malloc(sizeof(Node));   
        if(!p)                           
        {
            printf("内存申请失败!\n");   
            return;                        
        }
        strcpy(p->data.name,name);         
        strcpy(p->data.tel,tel);        
        strcpy(p->data.address,adr);   
        if(CheckData(p,l)==0)   ?这里把l结构体赐给CheckData函数了   问题2     
        {
            free(p);                    
            printf("已有该记录,请按任意键后重新输入!");  
            getchar();                 
            continue;                                    
        }
                 p->next=r;      
        l->next=p;              
        r=p;        

        printf("是否继续输入?是Y,否N:");
        scanf("%c",&ch);               
        rewind(stdin);
        if(ch=='N'||ch=='n')            
            break;                        
    }
}
int CheckData(Node*p,Node*l)        
{
    Node*r=l->next;?这里结构体指针r所指向的应该是个空链表NULL    问题3   
    int result;            
    while(r)?可是这个地方r为真,表示r保存的不是空链表        问题4   
    {
        if ((strcmp(r->data.name,p->data.name)==0)  
            &&(strcmp(r->data.tel,p->data.tel)==0)
            &&(strcmp(r->data.address,p->data.address)==0))
        {
            result=0;        
            break;            
        }
        r=r->next;            
        result=1;            
    }
    return result;            
}
         
int main()
{
    Node*l;
    l=(Node*)malloc(sizeof(Node));         
    if (l==NULL)                        
    {
        printf("为节点申请内存失败!");  
        return 1;                          
    }
    l->next=NULL;   ?这里l->next保存的是NULL表示没有链表了    问题1        
    while(1)            
    {
        switch(menu2())   
        {
        case 1:            
            insert(l);  
            break;        
        
        case 7:            
            printf("程序结束\n");
            exit(0);            }
    }
    return 0;
}
此程序不是完整程序本人只是把有问题的代码发出来的
l->next其他代码都没有用链表和结构体
l->next一直都是NULL怎么到了后面就不是NULL了
搜索更多相关主题的帖子: address insert record 结构体 姓名 
2015-10-16 23:52
快速回复:结构体链表问题
数据加载中...
 
   



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

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