标题:萌新编程出现[Error] ld returned 1 exit status大佬帮忙看看哪里错了
只看楼主
浮生若
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2019-3-2
 问题点数:0 回复次数:0 
萌新编程出现[Error] ld returned 1 exit status大佬帮忙看看哪里错了
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define TITLE "学生信息管理系统"
#define MAX 100
#define MENU_MAIN_COUNT 7
#define MENU_SEARCH_COUNT 2
typedef struct student{
char name[MAX];//定义学生姓名
char num[MAX];//定义学生学号
char sex[MAX];//定义学生性别
char age;
char major;
struct student *next;//指向下一学生的指针
}stu;
stu *head=NULL;//定义头节点,使之为空
void input_record();//创建学生信息
void show_record();//显示学生信息
void search_record();//查询学生信息
void add_record();//添加学生信息
void delete_record();//删除学生信息
void save_to_file();//保存文件
void exit_system();//返回
void search_by_num();//通过学号查找
void search_by_name();//通过姓名查找
void search_exit();//退出系统
void create_stu_by_input(stu *pNewStu);//通过输入为student赋值
void print_table_row(stu *p);//显示一条学生记录
void print_menu_title(char *title);//显示菜单标题
void clear_record();//清空所有记录
void print_menu_main();// 显示主菜单
void print_menu_title(const char *title);//显示菜单标题
void print_menu_title(const char *title)
{
    printf("========================================\n");
    printf("************%s************\n",title);
    printf("----------------------------------------\n");
}//显示菜单标题的处理函数

void (*menu_main_func[]) () =
{
    input_record,
        show_record,
        search_record,
        add_record,
        delete_record,
        save_to_file,
        exit_system
};//存储主菜单7个功能函数地址的函数指针数组
void print_menu_main()
{
int selected=0;//用户选择的菜单项
char menu_main[]=
"|                                       |\n"                                             
"|           1 输入学生信息              |\n"        
"|           2 显示学生信息              |\n"        
"|           3 查询学生信息              |\n"        
"|           4 添加学生信息              |\n"        
"|           5 删除学生信息              |\n"         
"|           6 保存文件                  |\n"            
"|           7 退出系统                  |\n"            
"|                                       |\n";//主菜单显示的字符      
system("cls");//做清屏处理。
    print_menu_title(TITLE);//输出标题。
    printf(menu_main);//显示菜单字符。
    printf("=========================================\n");
    while(!(selected>=1&&selected<=MENU_MAIN_COUNT))
    {
        printf(">请选择:");
        scanf("%d",&selected);
        if(selected>=1&&selected<=MENU_MAIN_COUNT){
            break;
        }
        printf("\n>输入错误!(注:请选择1-%d)\n",MENU_MAIN_COUNT);
    }//用户选择及错误选择时做循环处理,直到用户选择正确。
    menu_main_func[selected-1]();//根据用户的选择,调用相应的功能菜单。
}


void(*menu_search_func[])()=
{
    search_by_num,
    search_by_name,
        search_exit};//存储查询功能函数的函数指针数组
stu *get_last_student(stu *p)
{
    if(p->next==NULL)
    {
        return p;
    }
    else
    {
        return get_last_student(p->next);
    }
}//取得链表最后一个值的函数

int main(){
    print_menu_main();//显示主菜单等待用户输入
}
void input_record()
                      {
                      char continue_input='N';
                      stu *pLastStu=NULL;
                      stu *pNewStu=(stu*)malloc(sizeof(stu));//创建一个stu
                      pNewStu->next=NULL;
                      create_stu_by_input(pNewStu);//为创建的stu赋值
                      if(head==NULL)
                      {
                      head=pNewStu;
                      }//如果链表头为空,那么该信息为第一个
                      else
                      {
                      pLastStu=get_last_student(head);
                      pLastStu->next=pNewStu;
                      }//否则为最后一个信息
                      printf("继续输入学生信息?(Y继续,N返回菜单)");//询问用户是否继续输入
                      getchar();
                      continue_input=getchar();
                      if(continue_input=='n'||continue_input=='N')
                      {
                        print_menu_main();
                      }//如果否返回主菜单
                      else
                      {
                          input_record();
                      }//否则再次调用
}
void create_stu_by_input(stu* pNewStu){
    printf(">请输入学生信息(注:最大长度是10个字符):\n");
    printf("学号:");
    scanf("%s",pNewStu->num);
    printf("姓名:");
    scanf("%s",pNewStu->name);
    printf("性别:");
    scanf("%s",pNewStu->sex);
    printf("年龄;");
    scanf("%s",&(pNewStu->age));
    printf("专业班级:");
    scanf("%s",&(pNewStu->major));}//提示用户输入学生信息的函数
void search_record()
{
    int selected =0;//用户选择的菜单项
    char menu_search[]=
"|                                      |\n"
"|          1 按照学号查询              |\n"
"|          2 按照姓名查询              |\n"
"|          4 返回上级菜单              |\n"
"|                                      |\n";//查询子系统显示的字符
    system("cls");//清屏
    print_menu_title("查询学生信息");//输出子菜单名
    printf(menu_search);//输出子系统显示的字符
    printf("========================================\n");
    while (!(selected>=1&&selected<=MENU_SEARCH_COUNT))
{
    printf(">请选择:");
    scanf("%d",&selected);
    if(selected>=1&&selected<=MENU_SEARCH_COUNT)
    {
        break;
    }
    printf("\n>输入错误!(请选择1-%d)\n)",MENU_SEARCH_COUNT);//用户选择及错误选择时做循环处理,直到用户选择正确。
}
menu_search_func[selected-1]();//调用用户选择项所对应的函数
}
void search_by_num()//通过学号查询
{
    char num[MAX];
    char continue_input='N';
    stu *p=head;
    int isfound=0;
    printf(">请输入学生学号:");//提示用户输入
    scanf("%s",num);
    printf("\n>查找[%s]...\n",num);
    while(p!=NULL)
    {
        if(strcmp(p->num,num)==0)
        {
        isfound=1;
        break;//学号唯一,查到跳出循环
         
     }
     p=p->next;
}
 if(!isfound)
 printf("\n没有找到结果!\n");
 printf("继续查找?(Y继续,N返回)");
 getchar();
 continue_input=getchar();
if(continue_input=='Y'||continue_input=='y')
 {
     search_by_num();// 继续调用查找
     }   
     else
     {
         search_record();//返回菜单
     }
     }
     void search_by_name()//通过姓名查找
{
    char name[MAX];
    char continue_input='N';
    stu *p=head;
    int isfound=0;
    printf(">请输入学生姓名:");//提示用户输入
    scanf("%s",name);
    printf("\n>查找[%s]...\n",name);
    while(p!=NULL)
    {
        if(strcmp(p->name,name)==0)
        {
        print_table_row(p);
        isfound=1;//姓名不唯一,查询到最后一个
         
     }
     p=p->next;
}
 if(!isfound)
 printf("\n没有找到结果!\n");

 printf("继续查找?(Y继续,N返回)");
 getchar();
 continue_input=getchar();
 if(continue_input=='Y'||continue_input=='y')
 {
     search_by_name();//继续调用查找
     }   
     else
     {
         search_record();//返回菜单
     }
     }
     void search_exit()//退出子菜单函数
     {
         print_menu_main();//返回主菜单
     }
void print_title(char *title)
{printf("=================================\n");
printf("| %s\n,title");
printf("---------------------------------\n");}//菜单标题处理函数
void print_table_head()
{
    printf("+--------------+----------+----------+----+----+----+------+\n");
    printf("|     学号     |   姓名   |   性别   |年龄|专业班级|\n");
    printf("+--------------+----------+----------+----+----+----+------+\n");//学生信息表格头部函数
}
void print_table_row(stu *p)
{
    printf("|%14s|%10s|%10s|%4s|%10s|\n",
    p->num,p->name,p->sex,p->age,p->major);//显示一个学生的记录
}
void print_table_buttom()
{
    printf("+--------------+----------+----------+----+----+----+------+\n");//学生信息表格尾部函数
}

     void add_record()//添加学生信息函数
     {
         stu *p=head;
         char num [MAX];
         char continue_input='N';
         printf("请输入要添加的学生学号:");//提示用户输入
         scanf("%s",num);
         while(p!=NULL)
         {
             if(strcmp(p->num,num)==0)
             {
             break; //如果找到,停止循环
          }
          p=p->next;
    }
    if(p==NULL)
    {printf("没有学号是[%s]的学生.",num);//如果没有,输入提示
    }
          else
          {
              create_stu_by_input(p);//否则更新
          }
          printf("继续添加吗?(Y继续,N返回菜单)");
          getchar();
          continue_input=getchar();
          if (continue_input=='n'||continue_input=='N')
          {
              print_menu_main();
           } //如果输入n返回主菜单
           else{
               add_record();//否则继续
           }
     }
     
void delete_record()
{
    stu *p=head;
    stu *pPre=NULL;
    char num[MAX];
    char continue_input='N';
    printf("请输入要删除的学生学号:");//提示用户输入
    scanf("%s",num);
    while (p!=NULL)
    {
        if(strcmp(p->num,num)==0)
    {
        break; //如果找到,停止循环
    }
    p=p->next;
     }
     if(p==NULL)
     {
         printf("没有学号是[%s]的学生。",num);//如果为空,输出提示
     }
     else
     {
         printf("确认要删除学号为[%s]的学生吗?(Y确定,N取消)",p->num,p->name);
         getchar();
         continue_input=getchar();
         if(continue_input=='y'||continue_input=='Y');
         {
             pPre=head;
             if(pPre==p)
             {
                 head=p->next;//如果p为头节点,直接删除,头节点改为其后继节点
                 free(p);
                  
              }
              else
              {
                  while (pPre !=NULL)
                  {
                      if(pPre->next==p)//找到p的前驱节点
                      {
                          pPre->next=p->next;//p的前驱的next指针指向p的next
                          free(p);//释放p节点
                          break;
                          
                      }
                      pPre=pPre->next;
                  }
              }
              printf(">删除成功!\n");
         }
     }
     printf("继续删除吗?(Y继续,N返回菜单)");
     getchar();
     continue_input=getchar();
     if(continue_input=='n'||continue_input=='N')
     {
         print_menu_main();//返回主菜单
     }
     else{
         delete_record();//继续删除
     }
}
void clear_record(stu *p)
{
    if (p==NULL)
    {
        return;//如果为空,返回
    }
    if(p->next==NULL)
    {
        free(p);//如果next指针为空,删除该节点
    }
    else
    {
        clear_record(p->next);//再次调用本函数,以结构体next指向的节点作为参数
        free(p);//删除当前节点
        p=NULL;//将指针置空
    }
}
void save_to_file()//保存到文件函数
{
    FILE *fp;
    char file[100];
    stu *p=head;
    printf("请输入文件名:(须带有文件格式)");//提示用户输入
    scanf("%s",file);
    fp=fopen(file,"w");
    while(p!=NULL)
    {
        fprintf(fp,"%s,%s,%s,%d,%d,%d,%d\n",
         p->num,p->name,p->sex,p->age,p->major);
         p=p->next;//保存的信息内容
    }
    fclose(fp);
    printf("保存成功!\n按任意键返回菜单..\n");
    getchar();
    getchar();
    print_menu_main();
}
void exit_system()//退出系统函数
{
    clear_record(head);//释放整个链表
    exit(0);
}
搜索更多相关主题的帖子: stu next void 输入 printf 
2019-03-02 17:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-493337-1-1.html




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

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