m0_68786233 2022-03-29 09:01 采纳率: 100%
浏览 29
已结题

C语言编电话薄,只开了个头。为什么运行不了

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Node
{
char pname[20];
char pnum[12];
char pindex[30];
struct Node* next;
} Phone;

// 初始化
void Initialize(Phone* list)
{
list = (Phone*)malloc(sizeof(Phone));
list->next=NULL;
}

// 添加记录
void Add(Phone* list, char* name, char* num, char* index)//const限制一个变量不允许改变,起到静态变量的作用
{
Phone* p,p1;
for (p = list; p->next != NULL; p = p->next);
p1 = (Phone
)calloc(sizeof(Phone),1);
strcpy(p1->pname, name);
strcpy(p1->pnum, num);
strcpy(p1->pindex, index);
p1->next=p->next;
p->next=p1;
printf("%s,%s,%s\n", p1->pname, p1->pnum, p1->pindex);
}

int main()
{
Phone* list;
Initialize(&list);
int i;
Phone *p;
int n;
printf("输入联系人个数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{

    scanf("%s,%s,%s\n", &p->pname,&p->pnum,&p->pindex);
    Add(list,p->pname,p->pnum,p->pindex);
    printf("%s,%s,%s\n", p->pname, p->pnum, p->pindex);
    p=p->next;
}
return 0;

}

  • 写回答

2条回答 默认 最新

  • a5156520 2022-03-29 09:35
    关注

    好像是因为给结构分配内存出现了错误,修改了一下,如下:

    
    
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    typedef struct Node
    {
        char pname[20];
        char pnum[12];
        char pindex[30];
        struct Node* next;
    } Phone;
    
    // 初始化
    void Initialize(Phone** list)
    {
        *list = (Phone*)malloc(sizeof(Phone));
        (*list)->next=NULL;
    }
    
    // 添加记录
    void Add(Phone* list, char* name, char* num, char* index)//const限制一个变量不允许改变,起到静态变量的作用
    {
        Phone* p,*p1;
        for (p = list; p->next != NULL; p = p->next);
    //    printf("0\n");
        p1 = (Phone *)malloc(sizeof(Phone));
    //    printf("1\n");
        strcpy(p1->pname, name);
        strcpy(p1->pnum, num);
        strcpy(p1->pindex, index);
    //    printf("2\n");
        p1->next=p->next;
        p->next=p1;
    //    printf("3\n");
    //    printf("%s,%s,%s\n", p1->pname, p1->pnum, p1->pindex);
    }
    
    int main()
    {
        Phone* list;
        char pname[20];
        char pnum[12];
        char pindex[30];
        
        printf("list=%p\n",list); 
        Initialize(&list);
        printf("list=%p\n",list); 
        int i;
        Phone *p;
        int n;
        printf("输入联系人个数:");
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
        
            scanf("%s %s %s", pname,pnum,pindex);
            Add(list,pname,pnum,pindex);
           // printf("%s,%s,%s\n", pname, pnum, pindex);
           // p=p->next;
        }
        
        //打印结果
        p = list->next;
        for(i=0;i<n;i++){
            if(p!=NULL){
                printf("%s %s %s\n",p->pname,p->pnum,p->pindex);
                p=p->next;
            }
        } 
        
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月7日
  • 已采纳回答 3月30日
  • 创建了问题 3月29日

悬赏问题

  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据