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 基于作物生长模型下,有限水资源的最大化粮食产量的资源优化模型建立
  • ¥15 生成的QRCode圖片加上下載按鈕
  • ¥15 板材切割优化算法,数学建模,python,lingo
  • ¥15 科来模拟ARP欺骗困惑求解
  • ¥100 iOS开发关于快捷指令截屏后如何将截屏(或从截屏中提取出的文本)回传给本应用并打开指定页面
  • ¥15 unity连接Sqlserver
  • ¥15 图中这种约束条件lingo该怎么表示出来
  • ¥15 VSCode里的Prettier如何实现等式赋值后的对齐效果?
  • ¥15 流式socket文件传输答疑
  • ¥20 keepalive配置业务服务双机单活的方法。业务服务一定是要双机单活的方式