buraka的gravatar头像
buraka 2018-01-03 17:11:55

为什么c程序一输入用户就停止工作?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int key1;
int key2;
int *p;
struct node
{
    char name[10];
    char address[20];
    char num[11];
    node *next;
};

typedef node *pnode;
typedef node *xingming;
node **phone;
node **nam;

void hash1(char num[11])
{
    int i=3;

    key1=(int)num[2];

    while(num[i]!=NULL)
    {
        key1+=(int)num[i];
        i++;
    }
    key1=key1%20;
}
void hash2(char name[10])
{
    int i=1;
    key2=(int)name[0];
    while(name[i]!=NULL)
    {
        key2+=(int)name[i];
        i++;
    }
    key2=key2%20;

}

node *input()
{
    node *temp;
    temp= new node;
    temp->next=NULL;
    printf("请输入姓名:\n");
    scanf("%s",temp->name);
    printf("输入地址:\n");
    scanf("%s",temp->address);
    printf("输入电话:\n");
    scanf("%s",temp->num);

    return temp;
}
int add()
{
    node *newphone;
    node *newname;
    newphone=input();
    newname=newphone;
    hash1(newphone->num);
    hash2(newname->name);
    newphone->next =phone[key1]->next;
    phone[key1]->next=newphone;
    newname->next=nam[key2]->next;
    nam[key2]->next=newname;
    return 0;
}
void create1()
{
    int i;
    phone=new pnode[20];
    for(i=0; i<20; i++)
    {
        phone[i]=new node;
        phone[i]->next=NULL;
    }
}
void create2()
{
    int i;
    nam=new xingming[20];
    for(i=0; i<20; i++)
    {
        nam[i]=new node;
        nam[i]->next=NULL;
    }
}
void display()
{
    int i;
    node *p=NULL;
    for(i=0; i<20; i++)
    {
        p=nam[i]->next;
        while(p)
        {
            printf("%s\n%s\n%s\n\n",p->name,p->address,p->num);
            p=p->next;
        }
    }
}
void serch_num(char num[])
{
    hash1(num);
    node *q=phone[key1]->next;
    while(q!=NULL)
    {
        if(strcmp(num,q->num)==0)
            break;
        q=q->next;
    }
    if(q)
        printf("%s\n%s\n%s\n",q->name,q->address,q->num);
    else printf("无此记录\n");
}
void serch_name(char name[10])
{
    hash2(name);
    node *q=nam[key2]->next;
    while(q!=NULL)
    {
        if(strcmp(name,q->name)==0)
            break;
        q=q->next;
    }
    if(q)
        printf("%s\n%s\n%s\n",q->name,q->address,q->num);
    else printf("无此记录\n");
}
void menu()
{
    printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
    printf("@_____________请输入你的选择_______________@\n");
    printf("@_______0.添加记录   1.查找记录____________@\n");
    printf("@_______2.显示记录   3.清空记录____________@\n");
    printf("@________________4.退出系统________________@\n");
    printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
}
int main()
{
    char num[11];
    char name[10];

    create1();
    create2();

    int select;
    while(1)
    {
        menu();
        scanf("%d",&select);
        switch(select)
        {
        case 1:
        {
            system("cls");
            printf("6.号码查询,7.姓名查询\n");
            int a;
            scanf("%d",&a);
            if(a=6)
            {
                printf("请输入电话号码:\n");
                scanf("%s",&num);
                printf("输出查找的信息:\n");
                serch_num(num);
            }
            else
            {
                printf("请输入姓名\n");
                scanf("%s",name);
                printf("输出查找的信息\n");
                serch_name(name);
            }
        }
        break;
        case 2:
        {
            system("cls");
            printf("显示结果\n");
            display();
        }
        break;
        case 0:
        {
            system("cls");
            printf("请输入要添加的内容\n");
            add();
        }
        break;
        case 3:
        {为什么c程序一输入用户就停止工作?
            system("cls");
            printf("列表已清空\n");
            create1();
            create2();
        }
        break;
        default:
            return 0;
        }
    }
    return 0;
}

 

 

所有回答列表(1)
无聊居士的gravatar头像
无聊居士  LV5 2018年1月6日
程序停止响应,是因为你的内存出现非法读写操作
请检查你的代码所有关于内存读写的地方
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友