布吉岛- 2022-06-26 17:08 采纳率: 100%
浏览 80
已结题

程序出现Segmentation fault (core dumped)这是哪里的问题

程序出现Segmentation fault (core dumped)这是哪里的问题

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

typedef struct ListData      //数据域 
{    char name[10];    //姓名
     int account;  //账号
      char password[10];   //密码
      float money;    //余额 
}ListData;
typedef struct node    //链表结点
{
    ListData data;   
    struct node *next;
 }Link;

  
   void InitList(Link*L)   
  {
      L=(Link*)malloc(sizeof(Link));
      L->next=NULL;
   }                //空链表L的建立1
   void InsertList(Link*L)  //插入结点进行开户
   {   int paiwei=1;
        Link *s;
        s=(Link*)malloc(sizeof(Link));    //创建新结点a
        printf("请输入您开户的姓名:");
        scanf("%s",&s->data.name);
        s->data.account=100000+paiwei++;
        printf("您的开户账号为:%d\n",s->data.account);
         printf("请输入您的密码:");
         scanf("%s",s->data.password);
         s->data.money=0.00;
         s->next=NULL;
         if(L->next==NULL)     //头插法 
            L->next=s;
            else
            {
                s->next=L->next;
                L->next=s;
            }
          printf("开户成功!\n");
         
    } 
    void DeleteList(Link*L)  //通过删除结点来实现销户功能
    {
        Link *p=L,*q;
        char pass[6];
        int s;
        printf("请输入您要注销的账号:");
        scanf("%d",&s);
        printf("请输入账号密码:"); 
        scanf("%s",&pass);
        while(p->next!=NULL)
        {
            if(p->next->data.account==s)
            break;
            p=p->next;
        }
           if(p->next!=NULL)
           {
               while(strcmp(p->next->data.password,pass)!=0)
               {printf("密码错误!请重新输入:");
                 scanf("%s",pass);    
                    }
                 q=p->next;
                 p->next=q->next;
                 free(q);
                 printf("注销成功!\n");
           }
           else 
           printf("您要注销的账户不存在。\n");
     } 
     void PrintList(Link*L)  //输出链表来输出用户信息
     {
         Link*p=L->next;
         while(p!=NULL)
         {
             printf("%s\t",p->data.name);
             printf("%d\t%s\t.2f\n",p->data.account,p->data.password,p->data.money);
             p=p->next;
         }
      } 
      void Deposit(Link*L,Link*p) //  储户存款、取款、查询余额
        
          {
           int cq;
           float mn;
           while(1)
           if(p!=NULL)
             {  printf("\n1、存款2、取款3、查询余额4、退出账号\n 请输入数字(1-4)选择功能:\n");
              scanf("%d",&cq);
              if(cq==1){ 
           printf("请输入你的存款金额:");
           scanf("%f" ,&mn);
           p->data.money=p->data.money+mn;
           printf("存款成功!\n");
           }
          else if(cq==3)
           {
             printf("你账户的余额为:%.2f\n",p->data.money);
             }
          else if(cq==4)
          {
              printf("账号退出成功!\n");
              return;
          }
          else
          {printf("请输入取款金额:");
            scanf("%f",&mn) ;
            if((p->data.money-mn)>=0)
            {
                p->data.money=p->data.money-mn;
                printf("取款成功!\n"); 
            }
            else
        {
             printf("取款失败!\n");
             printf("您的余额为:%2fRMB\n",p->data.money);
             printf("请输入合适的金额:"); 
            }
          }
         }
      }  
      void Search(Link*L)// 查找链表实现登录
      {Link*p=L->next;
        int acc;
        char pass[6];
        printf("请输入您要登录的账号:");
        scanf("%d",&acc);
        printf("请输入您的密码");
        scanf("%s",&pass);
        while(p!=NULL)
        {
            if(p->data.account==acc)
            break;
            p=p->next;
        }
        if(p==NULL)
        
            printf("不存在该账户!\n");
            else
        {   if(strcmp(p->data.password,pass)==0)
              printf("登录成功!\n");
           else
           {
               while(strcmp(p->data.password,pass)!=0)
               {
                   char pa;
                   printf("密码错误!\n");
                   printf("按任意键重新输入,Nor退出");
                   scanf("\n%c",&pa);
                   if(pa=='n'||pa=='N') 
                   {
                       system("cls");
                       return;
                   }
                   printf("\n 请重新输入密码:");
                   scanf("%s",pass); 
               }
           }
            Deposit(L,p);
        }
         
      }
     void menu()   //菜单
  {
      printf("****************欢迎使用活期存蓄账目管理系统*********************\n");
    printf("**********      1 .注册账户      *************\n") ;
    printf("**********      2 .注销账户      *************\n") ;
    printf("**********      3 .进行存款      *************\n") ;
    printf("**********      4 .查询账户      *************\n") ;
    printf("**********      5 .查看所有账户     *************\n") ;
    printf("**********      6 .退出系统      *************\n") ;
   } 
    void choice()
    {
        Link*L;
        InitList(L);
        while(1)
        {
            int m;
            char ch;
            printf("请选择您的功能:");
            scanf("%d",&m);
            if(m==6)
                break;
                system("cls");
            switch(m)
            {
                
            case 1:InsertList(L);ch=getchar();break;
            case 2:DeleteList(L);ch=getchar();break;
            case 3:Search(L);ch=getchar();break;
            case 4:menu();ch=getchar();break;
            case 5:PrintList(L);ch=getchar();break;
            default:printf("输入错误!\n");break;
            
        }
        }
    }

int main()
   {
       menu();
       choice(); 
    
   
   }

  • 写回答

1条回答 默认 最新

  • 赵4老师 2022-06-27 10:51
    关注

    Windows:
    崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。

    Linux:
    进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’
    使用命令
    gdb 运行程序名 core或core.数字
    进入gdb然后使用bt命令
    可以查看进程意外退出前函数调用的堆栈,内容为从上到下列出对应从里层到外层的函数调用历史。
    如果进程意外退出不产生core文件,参考“ulimit -c core文件最大块大小”命令

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 7月5日
  • 已采纳回答 6月27日
  • 创建了问题 6月26日

悬赏问题

  • ¥15 matlab答疑 关于海上风电的爬坡事件检测
  • ¥88 python部署量化回测异常问题
  • ¥30 酬劳2w元求合作写文章
  • ¥15 在现有系统基础上增加功能
  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄