user-0 提问: 这个顺序表为什么才输入完元素个数就中断了呢

回复:
user: user-1
content: 一般这种错误会提示非法地址访问的，debug一下，应该很快能定位到错误部分的。

user: user-0
content: 大佬万岁，我好蠢啊，忘记加取地址符了，放了个假我人都傻了，哎呀

user: user-2
content: 103行的scanf仍旧没有&

user: user-2
content: /*#include <iostream.h> #include <iomanip.h>*/ #include <conio.h> #include <stdio.h> #include <process.h> #include <string.h> #include <math.h> #include <stdlib.h> int max = 10000;  struct SqList {     int elem[10000]; //存放元素的数组     int length;      //当前长度 };  void init(SqList &list); void display(SqList &list); void insert(SqList &list); void search(SqList &list); void del(SqList &list); void simpleSort(SqList &list); void quickSort(SqList &list); void binarySearch(SqList &list); void inverter(SqList &list); void orderlyinserted(SqList &list); void specifydelete(SqList &list); void merge(SqList &LA, SqList &LB, SqList &LC);  SqList list, LA, LB, LC; //本人百度得出，线性表的顺序实现结构体  int main() {     char choice;      while (1)     {         //stem("cls");//本人百度出来的，“system("cls");的意思就是调用DOS下的清屏命令“cls”         printf("\n\n\n\n");         printf("\t\t            静态线性表操作  \n");         printf("\t\t======================================");         printf("\n\n");         printf("\t\t             1：初始化      \n");         printf("\t\t             2：显示        \n");         printf("\t\t             3：单个插入    \n");         printf("\t\t             4：查找        \n");         printf("\t\t             5：删除        \n");         printf("\t\t             6：简单排序    \n");         printf("\t\t              7:快速排序    \n");         printf("\t\t              8折半查找   \n");         printf("\t\t             9:就地逆置   \n");         printf("\t\t             10：有序插入    \n");         printf("\t\t             11：删除顺序表中元素值在 x到y(x和y自定)之间的所有元素   \n");         printf("\t\t             12：实现将两个非递减的顺序表进行合并    \n");         printf("\n");         printf("\t\t             0：退出        \n");         printf("\n");         printf("\t\t请选择：");          choice = getch();          switch (choice) //里面的这个选择是前面定义的变量，也就是表达式。         {         case '1':             init(list);             break;         case '2':             display(list);             break;         case '3':             insert(list);             break;         case '4':             search(list);             break;         case '5':             del(list);             break;         case '6':             simpleSort(list);             break;         case '7':             quickSort(list);             break;         case '8':             binarySearch(list);             break;         case '0':             exit(0);         }     } }  //对以下代码提示，屏幕提示后，从键盘输入线性表长度和(随机数种子)!!!，生成(指定长度)!!!的线性表list void init(SqList &list) //顺序表的初始化 {     int i;     while (1)     {         printf("输入元素个数（0－10000 ）：");         scanf("%d", &list.length);         if (list.length >= 0 && list.length <= max) /*本人百度搜索得到的线性表初始化格式如下    ，因为此题有特殊要求所以看以来不大一样                                                                                           //初始化顺序表                                                                                          void InitList(PSeqList L)                                                                                         {                                                                                              if (L == NULL)话说这一步是什么意思，是等于空就没有意义了是吗？                                                                                          {                                                                                                    return;                                                                                         }                                                                                               L->length = 0;                                                                                         }  */             break;         printf("\n");     }     while (1)     {         printf("输入随机数种子（0－32767）：");         scanf("%d", &i);         if (i >= 0 && i <= 32767)             break;         printf("\n");     }     srand(i); //指定随机数种子，相同的种子将产生相同的数据序列     rand();      for (i = 0; i < list.length; i++)     {         list.elem[i] = rand() % 10000;     }     for (i = list.length; i < max; i++)         list.elem[i] = 0; }  //承接以下编码内容，在屏幕上依次显示线性表list中的元素个数和全部元素 //格式应便于观察 //如果需要指定输出的宽度，可以使用 cout << setw(W) << X ，其中 X 是输出的数值，W 是占据的列数 void display(SqList &list) // 第一点显示 {     int k;     printf("%d\n", list.length);     for (k = 0; k < list.length; k++)     {         printf("%-3d", list.elem[k]);     }     printf("\n"); }  //以下内容，屏幕提示后，从键盘输入一个元素值，然后把这个新元素插到线性表list的！！末尾！！（亲爱的朋友，你这一点没有达成哟） //应有溢出判断和报告 void insert(SqList &list) //第二点，插入 {     int i, j;     printf("请输入一个需要插入的元素值：");     scanf("%d", i);     /*if(i<1||i>list.length+1)           //判断插入位置是否有效,但是这道题是尾插      {         return false;     }*/      if (list.length == max)     {         printf("顺序表已满，不能插入!\n");     }     list.elem[list.length] = i;     list.length++; }  //屏幕提示后，从键盘输入一个元素值，在线性表list中搜索这个元素 //屏幕显示搜索结果和搜索过程中的比较次数 void search(SqList &list) //第三点，查找 {     int i, e;     printf("请输入一个需要查找的元素值：");     scanf("%d", e);     for (int i = 0; i < list.length; i++)     {         if (list.elem[i] == e)             printf("list.elem[%d]=%d", i, e);         printf(" %d", i + 1);     } }  //屏幕提示后，从键盘输入一个元素值，在线性表list中删除这个元素!! //屏幕显示删除成功与否的信息，并显示比较次数和移动次数 void del(SqList &list) //第四点，删除 {     int i, j, count;     printf("请输入一个需要删除的元素值：");     scanf("%d", i);     count = 0;     if (i < 1 || i > list.length)         ; //删除位置有误     for (int j = i; j < list.length; j++)     {         list.elem[j - 1] = list.elem[j];         count++; //前移元素     }     list.length--;      printf("移动次数：%d", count);     printf("\n");     printf("比较次数：%d", i); }  //对线性表list进行简单排序 //屏幕显示比较次数和移动次数 void simpleSort(SqList &list) //第五点，简单排序 {     int m = list.length - 1;     int flag = 1;     int i, j, t, count;     count = 0; //flag用来标记某一趟排序是否发生交换     while ((m > 0) && (flag == 1))     {          flag = 0; //flag置为0，如果本趟排序没有发生交换，则不会执行下一趟排序          for (j = 1; j <= m; j++)         {             if (list.elem[j] > list.elem[j + 1])             {                 flag = 1; //flag置为1，表示本趟排序发生了交换                 t = list.elem[j];                 list.elem[j] = list.elem[j + 1];                 list.elem[j + 1] = t; //交换前后两个记录             }              --m;             count++; //交换了之后最大的已经排到后面了，所以减去一是为了减少计算量         }     }     printf("比较次数和移动次数均为：%d", count); }  //对线性表list进行快速排序 //屏幕显示比较次数和移动次数 void quickSort(SqList &list) //)第五点，快速排序 {     int count = 0, low, high;     list.elem[0] = list.elem[low]; //用子表的第一个记录作枢轴记录，假设最低等于0     list.elem[list.length] = list.elem[high];     int pivotkey = list.elem[low]; //枢轴记录关键字,有一个自创词语叫做枢轴关键字     while (low < high)     { //从表的两端向中间扫描         count++;         while (low < high && list.elem[high] >= pivotkey)             --high;         list.elem[low] = list.elem[high]; //将比枢轴小的记录移动到低端         while (low < high && list.elem[low] <= pivotkey)             ++low;         list.elem[high] = list.elem[low]; //将比枢轴大的记录移动到高端     }     list.elem[low] = list.elem[0]; //枢轴记录到位     printf("比较次数和移动次数均为：%d", count); }  //屏幕提示后，从键盘输入一个元素值，对经过排序的线性表list进行折半查找 //屏幕显示查找结果，并显示比较次数 void binarySearch(SqList &list) //第六点，折半查找 {     int key, i, j, temp;     if (list.length == 0)         printf("顺序表为空");     for (int i = 0; i < list.length; i++)     {         for (int j = i + 1; j < list.length; j++)         {             if (list.elem[i] > list.elem[j])                 temp = list.elem[j];             list.elem[j] = list.elem[i];             list.elem[i] = temp;         }     }     if (key < list.elem[0] || key > list.elem[list.length])         printf("恭喜您已经找到了，该元素所在位置为：查无此数");     printf("比较次数为：0");     int l = 0, h = list.length, midst, count = 0;     while (l <= h)     {         midst = (l + h) / 2;         if (key == list.elem[midst])         {             printf("恭喜您已经找到了，该元素所在位置为：第%d位", midst);         }         else if (list.elem[midst] > key)         {             h = midst - 1;         }         else         {             l = midst + 1;         }         count++;     } } void inverter(SqList &list) { //就地逆置     int i, j, temp, k;     int l = 0, h = list.length, midst;     midst = (l + h) / 2;     if (list.length == 0)         printf("顺序表为空");     for (int i = 0; i < midst; i++)     {         for (int j = list.length; j > midst; j--)         {             if (list.elem[i] > list.elem[j])                 temp = list.elem[j];             list.elem[j] = list.elem[i];             list.elem[i] = temp;         }         for (k = 0; k < list.elem[h]; k++)             printf("%d ", list.elem[k]);     } } void orderlyinserted(SqList &list) { //有序插入     int i, j, temp, k, a;     scanf("%d", k);     if (list.length == 0)         printf("顺序表为空");     for (int i = 0; i < list.length; i++)     {         for (int j = i + 1; j < list.length; j++)         {             if (list.elem[i] > list.elem[j])                 temp = list.elem[j];             list.elem[j] = list.elem[i];             list.elem[i] = temp;         }     }      //判断顺序表是否已满     if (list.length >= max)     {         printf("顺序表已满，不能插入！\n");     }     else     {         for (a = 0; a <= list.length; a--)         {             if (k >= list.elem[a - 1] && (k <= list.elem[a]))                 list.elem[a + 1] = list.elem[a]; //前面的等于后面的，相当于向后移了一位             printf("插入元素后的数据表为：%d", list.elem[a]);         }         list.length++; //数据表的长度加1     } }  void specifydelete(SqList &list) { //指定删除     int x, y, i;     if (x < 0 || y > list.length)         printf("无效删除");      else     {         for (i = y; i <= 2 * y - x; i++)         {             list.elem[i - (y - x + 1)] = list.elem[i];         } //用7、8、9、10、11元素分别覆盖2、3、4、5、6；     }     list.length -= y - x + 1; //顺序表长度减x,y之间的元素 }  void merge(SqList &LA, SqList &LB, SqList &LC) {     int i, j, k;     i = 0;     j = 0;     k = 0;     while (i < LA.length && j < LB.length)     {         if (LA.elem[i] <= LB.elem[j])         {             LC.elem[k] = LA.elem[i]; //小的先放             i++;             k++;         }         else         {             LC.elem[k] = LB.elem[j];             j++;             k++;         }     }     //当表LA比表LB长时，将表LA剩下的元素赋给表LC