user-0 提问: 关于c的简单程序问题 求解释

回复:
user: user-1
content: 2.课后实验内容：用单链表实现一个学生信息管理系统，     学生信息为如下表格，系统功能要求对学生信息进行录入，显示，插入一个新学生信息，删除一个学生，并实现按学号查找某学生信息。 例：现有一学生学籍信息表，该表包含如下学生信息：学号num、姓名name、年龄age、是否退学 LeaveSch。该信息表主要用于查询学生学籍信息，如有新生入学，则在表尾加入新生信息，将其LeavSch字段设为“N”：如有学生退学，则将其LeavSch字段设为 “Y”。 学号	姓名	年龄	是否退学 1101050101	王小二	18	N 1101050103	张三	21	N 1101050405	李四	18	Y 1101050406	刘小明	20	N 1201050102	杨升	19	N   #include <stdio.h> #include <string.h> #include <malloc.h>  #define MAXSIZE 100 typedef struct Student {   char no[10];   char name[20];    int   age;   char  leaveSch; }elemtype;  typedef struct {  elemtype  data[MAXSIZE];  int len; }Sequenlist;  Sequenlist *InitList(Sequenlist *L) {    L=( Sequenlist *)malloc(sizeof(Sequenlist));    L->len=0;    return(L); }  void  input(Sequenlist *L) {     int i,x;     char no[10];     char name[20];     int  age;     char leaveSch;     i=0;     printf("\n 请输入数据元素的量:");     scanf("%d",&x);     while(x!=i)     {       if(i==MAXSIZE)       {           printf("Table is overflow！！");       }       else 	  {           printf("\n Input data element,以回车键间隔:");           scanf("%s",no);           scanf("%s",name);           scanf("%d",&age);           fflush(stdin);           scanf("%c",&leaveSch);           strcpy(L->data[i].no,no);           strcpy(L->data[i].name,name);           L->data[i].age=age;           L->data[i].leaveSch=leaveSch; 	  } 	  i++;     }    L->len=i; }   void output(Sequenlist  *L) {   int i;   printf("\n  Output element of Table：\n");  for(i=0;i<L->len;i++)  {      printf("%s  ",L->data[i].no);      printf("%s  ",L->data[i].name);      printf("%d  ",L->data[i].age); 	 printf("%c  \n",L->data[i].leaveSch);  } }  int InsItem (Sequenlist *L, int i) {     int j;     char no[10];     char name[20];     int  age;     char leaveSch;     if( L->len>= MAXSIZE)     {         printf("The list is overflow.\n");         return 0;     }     else if( (i<1)||(i>L->len+1) )     {         printf("Position is not corrent.\n");         return 0;     }     else     {         printf("\n Input  new data element,以回车键间隔:");         scanf("%s",no);         scanf("%s",name);         scanf("%d",&age);         fflush(stdin);         scanf("%c",&leaveSch);         for(j=L->len-1;j>=i-1;j--)         {             L->data[j+1]=L->data[j];         }         strcpy(L->data[i-1].no,no);         strcpy(L->data[i-1].name,name);         L->data[i-1].age=age;         L->data[i-1].leaveSch=leaveSch;         L->len++;     return 1;     } }   int LocItem(Sequenlist *L,int item) {     int i,j;     j=L->len;     if(j==0)     {         printf("The sequenlist is empty");         //return 0;     }     for(i=0;i<=j;i++)     {         if(atoi(L->data[i].no)==item)         {             return (i+1);         }     }     printf("The item is not in this sequenlist");   return 0; }  int DelItem(Sequenlist *L, int i) {     int j;     if((*L).len==0)     {         printf("List is empty \n");         return 0;     }     else if( (i<1)||(i>(*L).len) )     {         printf("Delete item fail\n");         return NULL;     }     else     {         for ( j=i; j<=(*L).len-1;j++)         {             (*L).data[j-1]=(*L). data[j];         }         (*L).len--;         return 1;     }     }  main() {   int n,item;   int i;   Sequenlist *L;   L=InitList(L);   input(L);   output(L);   printf("请输入新生信息：");   InsItem(L,L->len+1);   output(L);   printf("请输入你要查找的学生的学号：");   scanf("%d",&item);   if (LocItem(L,item)==0)   {       printf("查找学生失败，不存在");   }   else   {       i=LocItem(L,item);       printf("%s  ",L->data[i-1].no);       printf("%s  ",L->data[i-1].name);       printf("%d  ",L->data[i-1].age);       printf("%c  \n",L->data[i-1].leaveSch);   }   printf("请输入你要删除的学生的学号：");   scanf("%d",&i);   DelItem(L,i);   output(L); } 我自己写的一道题，希望对你有帮助！

user: user-0
content: 谢谢！ 我明白了 问题解决了！~~~

user: user-2
content: #include<stdio.h>  #define SNUM 4 /* student number */ #define CNUM 3 /* course number */ /* User Code Begin(考生可在本行后添加代码，例如结构体的定义、函数原型声明等，行数不限) */ struct student {     char num[12];     int score[3];     char name[7]; };  void DispScore(struct student aa[]); void FindNoPass(struct student aa[]);  /* User Code End(考生添加代码结束) */  int main(void) {     int i, j;     struct student stu[SNUM];      printf("Please input student num name and score:\n");     for (i=0; i<SNUM; i++)     {         printf("Student %d: ", i+1);         scanf("%s %s", stu[i].num, stu[i].name);         for (j=0; j<CNUM; j++)         {             scanf("%d", &stu[i].score[j]);         }     }      DispScore(stu);     FindNoPass(stu);      return 0; }  /* User Code Begin(考生在此后完成自定义函数的设计，行数不限) */ void DispScore(struct student aa[]) {     int i,j;     printf("\nStudent Info and Score:\n");     for (i=0; i<SNUM; i++)     {         printf("%6s %8s", aa[i].num, aa[i].name);         for (j=0; j<CNUM; j++)         {             printf("%5d", aa[i].score[j]);         }         printf("\n");     } }  void FindNoPass(struct student aa[]) {     int i,j,k;     printf("\nTwo Course No Pass Students:\n");     for (i=0; i<SNUM; i++)     {         k=0;         for (j=0; j<CNUM; j++)         {             if(aa[i].score[j]<60)             {                 k++;             }         }         if(k >= 2)         {             printf("%6s %8s", aa[i].num, aa[i].name);             for (j=0; j<CNUM; j++)             {                 if(aa[i].score[j]<60)                 {                     printf("%5d", aa[i].score[j]);                 }             }             printf("\n");         }     } } 处理不及格的学生信息的函数里，逻辑有问题；请注意与上面函数比对一下函数逻辑不同之处。 另外，num定义长度不够，因为字符串也要考虑结束标记'\0'还要占一个字节，所以，你的程序里定义的num是越界的

user: user-3
content: #include <stdio.h> #include <stdlib.h> #define SNUM 4 #define CNUM 3 struct student  {  char num[5];  int score[3];  char name[7];  };  void DispScore(struct student aa[]);  void FindNoPass(struct student aa[]);   /* User Code End(考生添加代码结束) */   int main(void)  { 	int i, j; 	struct student stu[SNUM]; 	printf("Please input student num name and score:\n"); 	for (i=0; i<SNUM; i++) 	{  		printf("Student %d: ", i+1); 		scanf("%s %s", stu[i].num, stu[i].name); 		for (j=0; j<CNUM; j++) 		{ 			scanf("%d", &stu[i].score[j]); 		} 	} 	DispScore(stu); 	FindNoPass(stu); 	system("pause"); 	return 0;  } /* User Code Begin(考生在此后完成自定义函数的设计，行数不限) */  void DispScore(struct student aa[])  { 	int i,j; 	printf("\nStudent Info and Score:\n"); 	for (i=0; i<SNUM; i++) 	{ 		printf("%6s %8s", aa[i].num, aa[i].name); 		for (j=0; j<CNUM; j++) 		{ 			printf("%5d", aa[i].score[j]); 		} 		printf("\n"); 	}  } void FindNoPass(struct student aa[]) { 	int i,j,k; 	printf("\nTwo Course No Pass Students:\n"); 	for (i=0; i<SNUM; i++) 	{ 		k=0; 		for (j=0; j<CNUM; j++) 		{ 			if(aa[i].score[j]<60) 			{ 				k++; 			} 		} 		if(k >= 2) 		{ 			printf("%6s %8s", aa[i].num, aa[i].name); 			for (j=0; j<CNUM; j++) 			{ 				if(aa[i].score[j]<60) 				{ 					printf("%5d", aa[i].score[j]); 				} 			} 			printf("\n"); 		} 	} }