user-0 提问: 没有办法了，大神们看下顺序表的问题

回复:
user: user-0
content: 引用 6楼自信男孩 的回复:#include<stdio.h> #include<string.h> #include<stdlib.h> #include<malloc.h>  #define STU_NUM 100  typedef struct L l;  struct L {      int no[STU_NUM];     int b;     int c;     char name[STU_NUM][32];     int age[STU_NUM]; };  void init_info(l *p, int n) {     p->b = 0;     p->c = n; }  int insert_info(l *p, int no, char *T, int w, int j) {     int i;      if(p->c == p->b)         return -1;     if(j < 0)         j = 0;     if(j > p->b)         j = p->b;      for(i = p->b-1; i >= j; i--)     {         p->no[i+1] = p->no[i];         strcpy(p->name[i+1], p->name[i]);         p->age[i+1] = p->age[i];     }     p->no[j] = no;     strcpy(p->name[j], T);     p->age[j] = w;     p->b++;      return 0; } void show_info(l *p) {     int i;      for (i = 0; i < p->b; i++)     {         printf("学号：%d\n",p->no[i]);          printf("姓名：%s\n",p->name[i]);         printf("年龄：%d\n",p->age[i]);      }  } int search_info(l *p,int i) {     int q;     for(q=0;q<p->b;q++)         if(p->no[q] == i)             return q;     return -1; } int del_as_no(l *p, int no) {     int i, j;      for (i = 0; i < p->b; i++)         if(p->no[i] == no)             break;     if (i < p->b)     {         for (j = i; j < p->b-1; j++) {             p->no[j]=p->no[j+1];             strcpy(p->name[j], p->name[j+1]);             p->age[j] = p->age[j+1];         }         p->b--;          return i;     }     return 0; } int del_as_idx(l *p, int idx) {     int i;      if (idx < 0 || idx > p->b) {         printf("位置错误！\n");         return -1;     }     for (i = idx; i < p->b-1; i++) {         p->no[i] = p->no[i+1];         strcpy(p->name[i], p->name[i+1]);         p->age[i] = p->age[i+1];     }     p->b--;      return 0; } int main() {     l pp;     int q,t;     int item;     int A,C;      char name[32];      printf("元素地址为%p\t元素长度为%d\t元素个数为%d\n", pp.no, pp.b, pp.c);     init_info(&pp, STU_NUM);      printf("元素地址为%p\t元素长度为%d\t元素个数为%d\n", pp.no,pp.b,pp.c);     for (;;) {         printf("1、插入元素\t2、查找元素\t3、删除指定元素\t4、删除指定元素位置\t0、结束\n");          scanf("%d", &item);         if(item==1)         {             while(1)             {                 printf("请输入学号\n");                 fflush(stdin);                 scanf("%d", &A);                 if(A == 0)                     break;                 printf("请输入姓名\n");                 fflush(stdin);                 scanf("%s", name);                 if (strlen(name) <= 0)                     break;                 printf("请输入年龄\n");                 fflush(stdin);                 scanf("%d", &C);                 if(C == 0)                     break;                 printf("请输入插入位置！\n");                 fflush(stdin);                 scanf("%d", &t);                 insert_info(&pp, A, name, C, t-1);                  printf("学生信息管理系统:\n");                  show_info(&pp);               }         }         if(item == 2)         {             while(1)             {                 printf("请输入查找元素值，输入0结束查找操作！\n");                 fflush(stdin);                 scanf("%d",&q);                 if(q==0)                     break;                 t = search_info(&pp, q);                 if(t < 0)                     printf("没有找到满足条件的元素值!\n");                 else                      printf("找到满足条件的元素值，位置为%d\n",t+1);               }         }         if(item == 3)         {             while(1)             {                 printf("请输入删除元素值，输入0结束删除操作！\n");                 fflush(stdin);                 scanf("%d",&q);                 if(q==0)                     break;                 t = del_as_no(&pp, q);                 if(t<0)                     printf("没有找到符合条件的元素值！\n");                 else                 {                     printf("找到满足条件的元素值，位置为%d",t+1);                     printf("线性表为：\n");                     show_info(&pp);                 }             }         }         if(item==4)         {             while(1)             {                 printf("请输入删除元素位置，输入0结束删除操作！\n");                 fflush(stdin);                 scanf("%d",&t);                 if(t==0)                     break;                 q = del_as_idx(&pp,t);                 if (q < 0) {                     printf("没有找到符合人条件的元素值!\n");                 } else {                     printf("找到符合人条件的元素值，位置为%d",t+1);                     printf("线性表为：\n");                     show_info(&pp);                 }             }          }         if(item==0)             exit(0); }     return 0; } 函数使用f1,f2,f3...，我估计你过段时间再看这部分代码你也不知道f1,f2,f3...表示啥？ 代码写出来除了要实现对应的功能也是让别人看的，让别人去帮你看也要别人首先了解你的代码功能，但是使用这样的函数名，谁看了都费解。总之，变量名和函数名一定要做到见名知义，如果想继续编程，或走的更远建议遵循这条规则。 代码风格建议注意下，该加空格的要加空格，该回车的要回车。 name不能直接赋值，但是可以借助库函数实现，比如strcpy，strncpy等等 改了许多，暂不一一罗列了，请查看上面的代码，有问题可以继续提出来。谢谢

user: user-1
content: 我擦，这么长。。

user: user-2
content: #include<stdio.h> #include<string.h> #include<stdlib.h> #include<malloc.h>  #define STU_NUM 100  typedef struct L l;  struct L {      int no[STU_NUM];     int b;     int c;     char name[STU_NUM][32];     int age[STU_NUM]; };  void init_info(l *p, int n) {     p->b = 0;     p->c = n; }  int insert_info(l *p, int no, char *T, int w, int j) {     int i;      if(p->c == p->b)         return -1;     if(j < 0)         j = 0;     if(j > p->b)         j = p->b;      for(i = p->b-1; i >= j; i--)     {         p->no[i+1] = p->no[i];         strcpy(p->name[i+1], p->name[i]);         p->age[i+1] = p->age[i];     }     p->no[j] = no;     strcpy(p->name[j], T);     p->age[j] = w;     p->b++;      return 0; } void show_info(l *p) {     int i;      for (i = 0; i < p->b; i++)     {         printf("学号：%d\n",p->no[i]);          printf("姓名：%s\n",p->name[i]);         printf("年龄：%d\n",p->age[i]);      }  } int search_info(l *p,int i) {     int q;     for(q=0;q<p->b;q++)         if(p->no[q] == i)             return q;     return -1; } int del_as_no(l *p, int no) {     int i, j;      for (i = 0; i < p->b; i++)         if(p->no[i] == no)             break;     if (i < p->b)     {         for (j = i; j < p->b-1; j++) {             p->no[j]=p->no[j+1];             strcpy(p->name[j], p->name[j+1]);             p->age[j] = p->age[j+1];         }         p->b--;          return i;     }     return 0; } int del_as_idx(l *p, int idx) {     int i;      if (idx < 0 || idx > p->b) {         printf("位置错误！\n");         return -1;     }     for (i = idx; i < p->b-1; i++) {         p->no[i] = p->no[i+1];         strcpy(p->name[i], p->name[i+1]);         p->age[i] = p->age[i+1];     }     p->b--;      return 0; } int main() {     l pp;     int q,t;     int item;     int A,C;      char name[32];      printf("元素地址为%p\t元素长度为%d\t元素个数为%d\n", pp.no, pp.b, pp.c);     init_info(&pp, STU_NUM);      printf("元素地址为%p\t元素长度为%d\t元素个数为%d\n", pp.no,pp.b,pp.c);     for (;;) {         printf("1、插入元素\t2、查找元素\t3、删除指定元素\t4、删除指定元素位置\t0、结束\n");          scanf("%d", &item);         if(item==1)         {             while(1)             {                 printf("请输入学号\n");                 fflush(stdin);                 scanf("%d", &A);                 if(A == 0)                     break;                 printf("请输入姓名\n");                 fflush(stdin);                 scanf("%s", name);                 if (strlen(name) <= 0)                     break;                 printf("请输入年龄\n");                 fflush(stdin);                 scanf("%d", &C);                 if(C == 0)                     break;                 printf("请输入插入位置！\n");                 fflush(stdin);                 scanf("%d", &t);                 insert_info(&pp, A, name, C, t-1);                  printf("学生信息管理系统:\n");                  show_info(&pp);               }         }         if(item == 2)         {             while(1)             {                 printf("请输入查找元素值，输入0结束查找操作！\n");                 fflush(stdin);                 scanf("%d",&q);                 if(q==0)                     break;                 t = search_info(&pp, q);                 if(t < 0)                     printf("没有找到满足条件的元素值!\n");                 else                      printf("找到满足条件的元素值，位置为%d\n",t+1);               }         }         if(item == 3)         {             while(1)             {                 printf("请输入删除元素值，输入0结束删除操作！\n");                 fflush(stdin);                 scanf("%d",&q);                 if(q==0)                     break;                 t = del_as_no(&pp, q);                 if(t<0)                     printf("没有找到符合条件的元素值！\n");                 else                 {                     printf("找到满足条件的元素值，位置为%d",t+1);                     printf("线性表为：\n");                     show_info(&pp);                 }             }         }         if(item==4)         {             while(1)             {                 printf("请输入删除元素位置，输入0结束删除操作！\n");                 fflush(stdin);                 scanf("%d",&t);                 if(t==0)                     break;                 q = del_as_idx(&pp,t);                 if (q < 0) {                     printf("没有找到符合人条件的元素值!\n");                 } else {                     printf("找到符合人条件的元素值，位置为%d",t+1);                     printf("线性表为：\n");                     show_info(&pp);                 }             }          }         if(item==0)             exit(0); }     return 0; } 函数使用f1,f2,f3...，我估计你过段时间再看这部分代码你也不知道f1,f2,f3...表示啥？ 代码写出来除了要实现对应的功能也是让别人看的，让别人去帮你看也要别人首先了解你的代码功能，但是使用这样的函数名，谁看了都费解。总之，变量名和函数名一定要做到见名知义，如果想继续编程，或走的更远建议遵循这条规则。 代码风格建议注意下，该加空格的要加空格，该回车的要回车。 name不能直接赋值，但是可以借助库函数实现，比如strcpy，strncpy等等 改了许多，暂不一一罗列了，请查看上面的代码，有问题可以继续提出来。

user: user-3
content: 值传递   然并卵 嘿嘿

user: user-0
content: 这很难么？，，

user: user-4
content: printf("元素地址为%d\t元素长度为%d\t元素个数为%d\n",pp.a,pp.b,pp.c);   这句pp没初始化就使用了

user: user-0
content: 引用 1楼赵4老师 的回复:char *T定义指针取地址？

user: user-5
content: char *T