AIways 发表于 2021-6-30 00:28:46

C语言函数定义时使用&出现的一系列问题

百度看到有人说C语言中没有&没有作为引用 这一说法,把&删除后虽然程序没有报错但是并不能正常的运行
以c++的格式打开后就都可以正常运行,想要在C语言的环境下运行,但怎么改都搞不明白
想请教一下大家
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
#define N 40 //线性表存储空间的初始分配量
#define increase 10 //线性表存储空间的分配量增量
int choice;//定义全局变量
typedef struct {
      char name;
      int num;            //学号和房号都为整型
      int room;
} stu;
stu stud;
typedef struct {
      int length; //当前长度
      stu *elem;//存储空间基址
      int listsize;//当前分配的存储容量
} linklist;

//线性表初始化
void Init(linklist &L) {
      L.length = 0;
      L.elem = (stu *)malloc(N * sizeof(stu));
      L.listsize = N;
}

//操作菜单
void Menu() {
      printf( "**************************************\n" );
      printf( "***       欢迎进入宿舍管理系统   ***\n" );
      printf( "**************************************\n" );
      printf( "*      1.新建宿舍名单            *\n" );
      printf( "*      2.排序宿舍信息            *\n" );
      printf( "*      3.查询宿舍信息            *\n" );
      printf( "*      4.插入宿舍信息            *\n" );
      printf( "*      5.删除宿舍信息            *\n" );
      printf( "*      0.退出系统                *\n" );
      printf( "**************************************\n" );
      printf("请输入菜单(0-5):");
      scanf("%d", &choice);
      if (choice<0 || choice>5) {
                system("cls");
                printf("输入数字不对,请重新!\n");
                printf("\n");
                Menu();
      }

}

//打印学生信息
void Display(linklist &L) {
      int i;
      printf("姓名       学号    房号\n");
      for (i = 0; i<L.length; i++)
                printf("%-10s %-2d %5d\n", L.elem.name, L.elem.num, L.elem.room);
}

//返回主界面
void Ret() {   
      char c;
      fflush(stdin);
      printf("\n");
      printf("请按任意键进入主界面:");
      scanf("%c", &c);
      system("cls");
}

//创建学生信息表
void Create(linklist &L) {
      int i = 2;
      char ch;
      if (L.length >= L.listsize) { //判断学生的人数是否超过初值,如果超过,则重新分配
                stu *newbase;
                newbase = (stu*)realloc(L.elem, (N + increase) * sizeof(stu));
                L.elem = newbase;
                L.listsize += increase;
      }
      printf("********开始创建学生信息**********\n");
      printf("\n");
      printf("请输入第1个学生的信息\n");
      printf("请输入姓名:");
      fflush(stdin);      // 清空输入缓冲区,得到正确的输入数据
      gets(stud.name);    //输入一行字符串(姓名)
      printf("请输入学号:");
      scanf("%d", &stud.num);
      printf("请输入房号:");
      scanf("%d", &stud.room);
      ch = getchar();
      strcpy(L.elem.name, stud.name);
      L.elem.num = stud.num;
      L.elem.room = stud.room;
      L.length++;
      printf("\n");
      printf("是否继续输入?<y/n>:");
      scanf("%c", &ch);
      printf("\n");
      while (ch == 'y') {
                printf("请输入第%d个学生的信息\n", i);
                printf("请输入姓名:");
                fflush(stdin);      // 清空输入缓冲区,得到正确的输入数据
                gets(stud.name);    //输入一行字符串(姓名)
                printf("请输入学号:");
                scanf("%d", &stud.num);
                printf("请输入房号:");
                scanf("%d", &stud.room);
                strcpy(L.elem.name, stud.name);
                L.elem.num = stud.num;
                L.elem.room = stud.room;
                i++;
                L.length=i-1;
                ch = getchar();
                printf("\n");
                printf("是否继续输入?<y/n>:");
                scanf("%c", &ch);
                printf("\n");
      }
      if (ch == 'n')
                system("cls");
}

//按姓名排序(采用冒泡排序)
void sort1(linklist &L) {
      int i, j;
      stu temp;
      for (i = 0; i<L.length - 1; i++)
                for (j = 0; j<L.length-1-i; j++)
                        if (strcmp(L.elem.name, L.elem.name)>0) {
                              temp = L.elem;
                              L.elem = L.elem;
                              L.elem = temp;
                        }
}

//按学号排序(采用折半插入排序)
void sort2(linklist &L) {
      int i, j, mid, low, high;
      stu temp;
      for (i = 1; i < L.length; i++) {
                if(L.elem.num<L.elem.num) {
                        temp = L.elem;
                        low = 0;
                        high = i-1;
                        while (low <= high) {
                              mid = (low + high) / 2;
                              if (temp.num < L.elem.num)
                                        high = mid - 1;
                              else
                                        low = mid + 1;
                        }
                        for (j = i - 1; j >= high+1; j--)
                              L.elem=L.elem;
                        L.elem=temp;
                }
      }
}

//按房号排序(采用简单选择排序)
void sort3(linklist &L) {
      int i,j,k;
      stu temp;
      for(i=0; i<L.length-1; i++) {
                k=i;
                for(j=i+1; j<L.length; j++)
                        if(L.elem.room<L.elem.room)
                              k=j;
                if(k!=i){
                        temp = L.elem;
                        L.elem = L.elem;
                        L.elem = temp;
                }
      }
}
//排序函数
void Sort(linklist &L) {
      int c;
      printf("请输入排序的方式(1:按名字排序,2:按学号排序,3:按房号排序):");
      scanf("%d", &c);
      switch (c) {
                case 1:
                        sort1(L);
                        if (L.length == 0) {
                              printf("已无学生记录!\n");
                              Ret();
                              Menu();
                        } else {
                              printf("按姓名排序:\n");
                              Display(L);
                              Ret();//调用返回主界面
                              Menu();
                        }
                        break;
                case 2:
                        sort2(L);
                        if (L.length == 0) {
                              printf("已无学生记录!\n");
                              Ret();
                              Menu();
                        } else {
                              printf("按学号排序:\n");
                              Display(L);
                              Ret();//调用返回主界面
                              Menu();
                        }
                        break;
                case 3:
                        sort3(L);
                        if (L.length == 0) {
                              printf("已无学生记录!\n");
                              Ret();
                              Menu();
                        } else {
                              printf("按房号排序:\n");
                              Display(L);
                              Ret();//调用返回主界面
                              Menu();
                        }
                        break;
                default:
                        break;
      }
}

//选择是否继续查找
int Select() {
      char ch;
      scanf("%c", &ch);
      printf("是否继续查找?<y/n>:");
      fflush(stdin);
      scanf("%c", &ch);
      if (ch == 'y') {
                system("cls");
                return 1;
      } else
                return 0;
}

//按姓名从小到大查找(采用二分查找)
void search1(linklist &L) {
      if (L.length == 0) {
                printf("已无学生记录!\n");
                Ret();
                Menu();
      } else {
                int low = 0, high = L.length, mid, flag = 0;
                printf("\n");
                printf("按姓名查找-->请输入要查找的姓名:");
                char a, ch;
                scanf("%s", a);
                while (low <= high) {
                        mid = (low + high) / 2;
                        if (strcmp(a, L.elem.name) == 0) {
                              flag = 1;
                              break;
                        } else if (strcmp(a, L.elem.name)>0)
                              low = mid + 1;
                        else
                              high = mid - 1;
                }
                if (flag == 1) {
                        printf("查找成功-->该学生信息为:\n");
                        printf("姓名       学号    房号\n");
                        printf("%-10s %-2d %-5d\n", L.elem.name, L.elem.num, L.elem.room);
                        if (Select())
                              search1(L);
                        else {
                              system("cls");
                              Menu();
                        }
                } else {
                        printf("该学生不存在!");
                        if (Select())    search1(L);
                        else {
                              system("cls");
                              Menu();
                        }
                }
      }
}

//按学号从小到大查找(采用二分查找)
void search2(linklist &L) {
      if (L.length == 0) {
                printf("\n");
                printf("已无学生记录!\n");
                Ret();
                Menu();
      } else {
                int low = 0, high = L.length, mid, flag = 0;
                int n;
                char ch;
                printf("\n");
                printf("按学号查找-->请输入要查找的学号:");
                scanf("%d", &n);
                while (low <= high) {
                        mid = (low + high) / 2;
                        if (n == L.elem.num) {
                              flag = 1;
                              break;
                        } else if (n>L.elem.num)
                              low = mid + 1;
                        else
                              high = mid - 1;
                }
                if (flag == 1) {
                        printf("查找成功----->该学生信息为:\n");
                        printf("姓名       学号    房号\n");
                        printf("%-1s0 %-2d %-5d\n", L.elem.name, L.elem.num, L.elem.room);
                        if (Select())
                              search2(L);
                        else {
                              system("cls");
                              Menu();
                        }
                } else {
                        printf("该学生不存在!");
                        if (Select())
                              search2(L);
                        else {
                              system("cls");
                              Menu();
                        }
                }
      }
}

//按房号从小到大查找(采用二分查找)
void search3(linklist &L) {
      if (L.length == 0) { //此函数功能为:返回主界面
                printf("\n");
                printf("已无学生记录!\n");
                Ret();
                Menu();
      } else {
                int low = 0, high = L.length, mid, flag = 0;//flag作为标志符,为1则表示查找成功,否则没有所要查找的学生
                int m;
                char ch;
                printf("\n");
                printf("按房号查找-->请输入要查找的房号:");
                scanf("%d", &m);
                while (low <= high) {
                        mid = (low + high) / 2;
                        if (m == L.elem.room) {
                              flag = 1;
                              break;
                        } else if (m>L.elem.room)
                              low = mid + 1;
                        else
                              high = mid - 1;
                }
                if (flag == 1) {
                        printf("查找成功-->该学生信息为:\n");
                        printf("姓名       学号    房号\n");
                        printf("%-10s %-2d %-5d\n", L.elem.name, L.elem.num, L.elem.room);
                        if (Select())    //调用判断函数1
                              search3(L);
                        else {
                              system("cls");
                              Menu();
                        }
                } else {
                        printf("该学生不存在!");
                        if (Select())//调用判断函数2
                              search3(L);
                        else {
                              system("cls");
                              Menu();
                        }
                }
      }
}

//查找函数
void Search(linklist &L) {
      int c;
      printf("请输入查找的方式(1:按名字查找,2:按学号查找,3:按房号查找):");
      scanf("%d", &c);
      switch (c) {
                case 1:
                        sort1(L);
                        search1(L);
                        break;//先进行二分查找排序
                case 2:
                        sort2(L);
                        search2(L);
                        break;
                case 3:
                        sort3(L);
                        search3(L);
                        break;
                default:
                        break;
      }
}

//按学号从小到大插入该学生
void Insert(linklist &L) {
      int i, j, k;
      char ch;
      printf("\n");
      printf("插入的学生信息为:\n");
      printf("姓名:");
      fflush(stdin);// 清空输入缓冲区,得到正确的输入数据
      gets(stud.name);
      printf("学号:");
      scanf("%d", &stud.num);
      printf("房号:");
      scanf("%d", &stud.room);
      if (L.length == 0) {
                strcpy(L.elem.name, stud.name);
                L.elem.num = stud.num;
                L.elem.room = stud.room;
      }
      for (i = 0; i<L.length; i++) {
                if (stud.num<L.elem.num) {
                        k = i;
                        for (j = L.length; j>k; j--)
                              L.elem = L.elem;
                        strcpy(L.elem.name, stud.name);
                        L.elem.num = stud.num;
                        L.elem.room = stud.room;
                        break;
                } else {
                        strcpy(L.elem.name, stud.name);
                        L.elem.num = stud.num;
                        L.elem.room = stud.room;
                }
      }
      L.length++;
      fflush(stdin);
      printf("\n");
      printf("是否继续插入?<y/n>:");
      scanf("%c", &ch);
      if (ch == 'y') Insert(L);
      else system("cls");
}

//按学号删除该学生
void Delete(linklist &L) {
      int i, j, k = -1;
      char ch;
      printf("\n");
      printf("\n");
      printf("请输入要删除学生的学号:");
      scanf("%d", &stud.num);
      for (i = 0; i<L.length; i++) {
                if (stud.num == L.elem.num) {
                        printf("该学生的信息为:\n");
                        printf("姓名:%s \n学号:%d \n房号:%d\n", L.elem.name, L.elem.num, L.elem.room);
                        k = i;
                        for (j = k; j<L.length - 1; j++)
                              L.elem = L.elem;
                        printf("已成功删除\n");

                        break;
                }
      }
      if (i >= L.length) printf("该学生不存在\n");
      if (k >= 0)L.length--;
      fflush(stdin);
      printf("\n");
      printf("是否继续删除操作?<y/n>:");
      scanf("%c", &ch);
      system("cls");
      if (ch == 'y') Delete(L);
      else system("cls");
}

//主函数
int main() {
      linklist L;    //定义线性表 L
      Init(L);
      Menu();      //调用主菜单函数
      while (choice != 0) {
                system("cls");
                switch (choice) {
                        case 1:
                              Create(L);    //调用线性表创建函数
                              Menu();
                              break;
                        case 2:
                              Sort(L);
                              break;//调用排序函数
                        case 3:
                              Search(L);
                              break;//调用查找函数进行(二分)查找
                        case 4:
                              sort2(L);      //调用学号排序函数
                              Insert(L);      //按学号序列插入
                              system("cls");
                              printf("插入后的学生信息:\n");
                              Display(L);
                              Ret();
                              Menu();
                              break;
                        case 5:
                              Delete(L);    //调用删除函数
                              if (L.length == 0) {
                                        printf("\n");
                                        printf("学生记录已被删除完!\n");
                                        Ret();
                                        Menu();
                              } else {
                                        printf("显示删除后的学生信息:\n");
                                        Display(L);
                                        Ret();
                                        Menu();
                              }
                              break;
                }
      }
}

人造人 发表于 2021-6-30 10:40:58

C语言用指针
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//#include<windows.h>

#define N 40 //线性表存储空间的初始分配量
#define increase 10 //线性表存储空间的分配量增量

int choice; //定义全局变量

typedef struct {
    char name;
    int num;            //学号和房号都为整型
    int room;
} stu;

stu stud;

typedef struct {
    int length; //当前长度
    stu *elem;//存储空间基址
    int listsize;//当前分配的存储容量
} linklist;

//线性表初始化
void Init(linklist *L) {
    L->length = 0;
    L->elem = (stu *)malloc(N * sizeof(stu));
    L->listsize = N;
}

//操作菜单
void Menu() {
    printf( "**************************************\n" );
    printf( "***       欢迎进入宿舍管理系统   ***\n" );
    printf( "**************************************\n" );
    printf( "*      1.新建宿舍名单            *\n" );
    printf( "*      2.排序宿舍信息            *\n" );
    printf( "*      3.查询宿舍信息            *\n" );
    printf( "*      4.插入宿舍信息            *\n" );
    printf( "*      5.删除宿舍信息            *\n" );
    printf( "*      0.退出系统                *\n" );
    printf( "**************************************\n" );
    printf("请输入菜单(0-5):");
    scanf("%d", &choice);
    if (choice<0 || choice>5) {
      system("cls");
      printf("输入数字不对,请重新!\n");
      printf("\n");
      Menu();
    }
}

//打印学生信息
void Display(linklist *L) {
    int i;
    printf("姓名       学号    房号\n");
    for (i = 0; i<L->length; i++)
      printf("%-10s %-2d %5d\n", L->elem.name, L->elem.num, L->elem.room);
}

//返回主界面
void Ret() {   
    char c;
    fflush(stdin);
    printf("\n");
    printf("请按任意键进入主界面:");
    scanf("%c", &c);
    system("cls");
}

//创建学生信息表
void Create(linklist *L) {
    int i = 2;
    char ch;
    if (L->length >= L->listsize) { //判断学生的人数是否超过初值,如果超过,则重新分配
      stu *newbase;
      newbase = (stu*)realloc(L->elem, (N + increase) * sizeof(stu));
      L->elem = newbase;
      L->listsize += increase;
    }
    printf("********开始创建学生信息**********\n");
    printf("\n");
    printf("请输入第1个学生的信息\n");
    printf("请输入姓名:");
    fflush(stdin);      // 清空输入缓冲区,得到正确的输入数据
    //gets(stud.name);    //输入一行字符串(姓名)
    fgets(stud.name, 20, stdin);
    printf("请输入学号:");
    scanf("%d", &stud.num);
    printf("请输入房号:");
    scanf("%d", &stud.room);
    ch = getchar();
    strcpy(L->elem.name, stud.name);
    L->elem.num = stud.num;
    L->elem.room = stud.room;
    L->length++;
    printf("\n");
    printf("是否继续输入?<y/n>:");
    scanf("%c", &ch);
    printf("\n");
    while (ch == 'y') {
      printf("请输入第%d个学生的信息\n", i);
      printf("请输入姓名:");
      fflush(stdin);      // 清空输入缓冲区,得到正确的输入数据
      //gets(stud.name);    //输入一行字符串(姓名)
      fgets(stud.name, 20, stdin);
      printf("请输入学号:");
      scanf("%d", &stud.num);
      printf("请输入房号:");
      scanf("%d", &stud.room);
      strcpy(L->elem.name, stud.name);
      L->elem.num = stud.num;
      L->elem.room = stud.room;
      i++;
      L->length=i-1;
      ch = getchar();
      printf("\n");
      printf("是否继续输入?<y/n>:");
      scanf("%c", &ch);
      printf("\n");
    }
    if (ch == 'n')
      system("cls");
}

//按姓名排序(采用冒泡排序)
void sort1(linklist *L) {
    int i, j;
    stu temp;
    for (i = 0; i<L->length - 1; i++)
      for (j = 0; j<L->length-1-i; j++)
            if (strcmp(L->elem.name, L->elem.name)>0) {
                temp = L->elem;
                L->elem = L->elem;
                L->elem = temp;
            }
}

//按学号排序(采用折半插入排序)
void sort2(linklist *L) {
    int i, j, mid, low, high;
    stu temp;
    for (i = 1; i < L->length; i++) {
      if(L->elem.num<L->elem.num) {
            temp = L->elem;
            low = 0;
            high = i-1;
            while (low <= high) {
                mid = (low + high) / 2;
                if (temp.num < L->elem.num)
                  high = mid - 1;
                else
                  low = mid + 1;
            }
            for (j = i - 1; j >= high+1; j--)
                L->elem=L->elem;
            L->elem=temp;
      }
    }
}

//按房号排序(采用简单选择排序)
void sort3(linklist *L) {
    int i,j,k;
    stu temp;
    for(i=0; i<L->length-1; i++) {
      k=i;
      for(j=i+1; j<L->length; j++)
            if(L->elem.room<L->elem.room)
                k=j;
      if(k!=i){
            temp = L->elem;
            L->elem = L->elem;
            L->elem = temp;
      }
    }
}
//排序函数
void Sort(linklist *L) {
    int c;
    printf("请输入排序的方式(1:按名字排序,2:按学号排序,3:按房号排序):");
    scanf("%d", &c);
    switch (c) {
      case 1:
            sort1(L);
            if (L->length == 0) {
                printf("已无学生记录!\n");
                Ret();
                Menu();
            } else {
                printf("按姓名排序:\n");
                Display(L);
                Ret();//调用返回主界面
                Menu();
            }
            break;
      case 2:
            sort2(L);
            if (L->length == 0) {
                printf("已无学生记录!\n");
                Ret();
                Menu();
            } else {
                printf("按学号排序:\n");
                Display(L);
                Ret();//调用返回主界面
                Menu();
            }
            break;
      case 3:
            sort3(L);
            if (L->length == 0) {
                printf("已无学生记录!\n");
                Ret();
                Menu();
            } else {
                printf("按房号排序:\n");
                Display(L);
                Ret();//调用返回主界面
                Menu();
            }
            break;
      default:
            break;
    }
}

//选择是否继续查找
int Select() {
    char ch;
    scanf("%c", &ch);
    printf("是否继续查找?<y/n>:");
    fflush(stdin);
    scanf("%c", &ch);
    if (ch == 'y') {
      system("cls");
      return 1;
    } else
      return 0;
}

//按姓名从小到大查找(采用二分查找)
void search1(linklist *L) {
    if (L->length == 0) {
      printf("已无学生记录!\n");
      Ret();
      Menu();
    } else {
      int low = 0, high = L->length, mid, flag = 0;
      printf("\n");
      printf("按姓名查找-->请输入要查找的姓名:");
      char a;//, ch;
      scanf("%s", a);
      while (low <= high) {
            mid = (low + high) / 2;
            if (strcmp(a, L->elem.name) == 0) {
                flag = 1;
                break;
            } else if (strcmp(a, L->elem.name)>0)
                low = mid + 1;
            else
                high = mid - 1;
      }
      if (flag == 1) {
            printf("查找成功-->该学生信息为:\n");
            printf("姓名       学号    房号\n");
            printf("%-10s %-2d %-5d\n", L->elem.name, L->elem.num, L->elem.room);
            if (Select())
                search1(L);
            else {
                system("cls");
                Menu();
            }
      } else {
            printf("该学生不存在!");
            if (Select())    search1(L);
            else {
                system("cls");
                Menu();
            }
      }
    }
}

//按学号从小到大查找(采用二分查找)
void search2(linklist *L) {
    if (L->length == 0) {
      printf("\n");
      printf("已无学生记录!\n");
      Ret();
      Menu();
    } else {
      int low = 0, high = L->length, mid, flag = 0;
      int n;
      //char ch;
      printf("\n");
      printf("按学号查找-->请输入要查找的学号:");
      scanf("%d", &n);
      while (low <= high) {
            mid = (low + high) / 2;
            if (n == L->elem.num) {
                flag = 1;
                break;
            } else if (n>L->elem.num)
                low = mid + 1;
            else
                high = mid - 1;
      }
      if (flag == 1) {
            printf("查找成功----->该学生信息为:\n");
            printf("姓名       学号    房号\n");
            printf("%-1s0 %-2d %-5d\n", L->elem.name, L->elem.num, L->elem.room);
            if (Select())
                search2(L);
            else {
                system("cls");
                Menu();
            }
      } else {
            printf("该学生不存在!");
            if (Select())
                search2(L);
            else {
                system("cls");
                Menu();
            }
      }
    }
}

//按房号从小到大查找(采用二分查找)
void search3(linklist *L) {
    if (L->length == 0) { //此函数功能为:返回主界面
      printf("\n");
      printf("已无学生记录!\n");
      Ret();
      Menu();
    } else {
      int low = 0, high = L->length, mid, flag = 0;//flag作为标志符,为1则表示查找成功,否则没有所要查找的学生
      int m;
      //char ch;
      printf("\n");
      printf("按房号查找-->请输入要查找的房号:");
      scanf("%d", &m);
      while (low <= high) {
            mid = (low + high) / 2;
            if (m == L->elem.room) {
                flag = 1;
                break;
            } else if (m>L->elem.room)
                low = mid + 1;
            else
                high = mid - 1;
      }
      if (flag == 1) {
            printf("查找成功-->该学生信息为:\n");
            printf("姓名       学号    房号\n");
            printf("%-10s %-2d %-5d\n", L->elem.name, L->elem.num, L->elem.room);
            if (Select())    //调用判断函数1
                search3(L);
            else {
                system("cls");
                Menu();
            }
      } else {
            printf("该学生不存在!");
            if (Select())//调用判断函数2
                search3(L);
            else {
                system("cls");
                Menu();
            }
      }
    }
}

//查找函数
void Search(linklist *L) {
    int c;
    printf("请输入查找的方式(1:按名字查找,2:按学号查找,3:按房号查找):");
    scanf("%d", &c);
    switch (c) {
      case 1:
            sort1(L);
            search1(L);
            break;//先进行二分查找排序
      case 2:
            sort2(L);
            search2(L);
            break;
      case 3:
            sort3(L);
            search3(L);
            break;
      default:
            break;
    }
}

//按学号从小到大插入该学生
void Insert(linklist *L) {
    int i, j, k;
    char ch;
    printf("\n");
    printf("插入的学生信息为:\n");
    printf("姓名:");
    fflush(stdin);// 清空输入缓冲区,得到正确的输入数据
    //gets(stud.name);
    fgets(stud.name, 20, stdin);
    printf("学号:");
    scanf("%d", &stud.num);
    printf("房号:");
    scanf("%d", &stud.room);
    if (L->length == 0) {
      strcpy(L->elem.name, stud.name);
      L->elem.num = stud.num;
      L->elem.room = stud.room;
    }
    for (i = 0; i<L->length; i++) {
      if (stud.num<L->elem.num) {
            k = i;
            for (j = L->length; j>k; j--)
                L->elem = L->elem;
            strcpy(L->elem.name, stud.name);
            L->elem.num = stud.num;
            L->elem.room = stud.room;
            break;
      } else {
            strcpy(L->elem.name, stud.name);
            L->elem.num = stud.num;
            L->elem.room = stud.room;
      }
    }
    L->length++;
    fflush(stdin);
    printf("\n");
    printf("是否继续插入?<y/n>:");
    scanf("%c", &ch);
    if (ch == 'y') Insert(L);
    else system("cls");
}

//按学号删除该学生
void Delete(linklist *L) {
    int i, j, k = -1;
    char ch;
    printf("\n");
    printf("\n");
    printf("请输入要删除学生的学号:");
    scanf("%d", &stud.num);
    for (i = 0; i<L->length; i++) {
      if (stud.num == L->elem.num) {
            printf("该学生的信息为:\n");
            printf("姓名:%s \n学号:%d \n房号:%d\n", L->elem.name, L->elem.num, L->elem.room);
            k = i;
            for (j = k; j<L->length - 1; j++)
                L->elem = L->elem;
            printf("已成功删除\n");

            break;
      }
    }
    if (i >= L->length) printf("该学生不存在\n");
    if (k >= 0)L->length--;
    fflush(stdin);
    printf("\n");
    printf("是否继续删除操作?<y/n>:");
    scanf("%c", &ch);
    system("cls");
    if (ch == 'y') Delete(L);
    else system("cls");
}

//主函数
int main() {
    linklist L;    //定义线性表 L
    Init(&L);
    Menu();      //调用主菜单函数
    while (choice != 0) {
      system("cls");
      switch (choice) {
            case 1:
                Create(&L);    //调用线性表创建函数
                Menu();
                break;
            case 2:
                Sort(&L);
                break;//调用排序函数
            case 3:
                Search(&L);
                break;//调用查找函数进行(二分)查找
            case 4:
                sort2(&L);      //调用学号排序函数
                Insert(&L);      //按学号序列插入
                system("cls");
                printf("插入后的学生信息:\n");
                Display(&L);
                Ret();
                Menu();
                break;
            case 5:
                Delete(&L);    //调用删除函数
                if (L.length == 0) {
                  printf("\n");
                  printf("学生记录已被删除完!\n");
                  Ret();
                  Menu();
                } else {
                  printf("显示删除后的学生信息:\n");
                  Display(&L);
                  Ret();
                  Menu();
                }
                break;
      }
    }
}

AIways 发表于 2021-6-30 12:39:33

人造人 发表于 2021-6-30 10:40
C语言用指针

谢谢你,是你说的这样呢,我自己再研究研究,太感谢了
页: [1]
查看完整版本: C语言函数定义时使用&出现的一系列问题