user-0 提问: 数据机构的顺序表实现不了？

回复:
user: user-1
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 int c; scanf("%c",&c); //时，都改为 char s[2]; int c; scanf("%1s",s); c=s[0];

user: user-2
content: 问题超级多，有几个scanf里面有\n,还有各种小问题，帮楼主调了一部分 InitList，创建学生信息表，DisplayList这3处帮楼主改正确了 之后的函数楼主可以结合DisplayList自己写，比如插入函数，在插入之前和之后都调用DisplayList，来看看自己插入正确了没  #include<stdio.h> #include<stdlib.h> #define ERROR 0 #define OK 1 #define OVERFLOW -1 #define Status int #define MAXSIZE 100 typedef struct { 	char no[4]; 	char name[8]; 	int price; }Student; typedef struct { 	Student *elem; 	int length; }SqList; int i,j; Status InitList(SqList &L)//初始化顺序表 { 	L.elem=new Student[MAXSIZE]; 	if(L.elem==0) exit(OVERFLOW); 	L.length=0; 	return OK; } void DisplayList(SqList L)//显示学生信息 { 	for(j=0;j<L.length;j++) 	{ 		printf("%s %s %d\n",L.elem[j].no,L.elem[j].name,L.elem[j].price); 	} } Status Searchelem(SqList L,int i,Student &e)//3查找对应的数据元素 { 	if(i<1||i>L.length) return ERROR; 	if(L.length!=0) return ERROR; 	e=L.elem[i-1]; 	return OK; } Status SearchElemName(SqList L,char e[8])//根据姓名查找 { 	for(j=0;j<L.length;j++) 	{ 		if(L.elem[j].name[8]==e[8]) 			return OK; 	} } Status InsertList(SqList &L,int i,Student e)//4插入一个数据元素 { 	if(L.length!=MAXSIZE) return ERROR; 	if(i<1||i>L.length) return ERROR; 	for(j=L.length-1;j<L.length-i;j--) 		L.elem[j+1]=L.elem[j]; 	L.elem[j-1]=e; 	L.length++; 	return OK; } Status DeleteList(SqList &L,int i)//5删除一个数据元素 { 	if(i<1||i>L.length) exit(ERROR); 	for(j=i;j<L.length;j++) 		L.elem[j-1]=L.elem[j]; 	--L.length; 	return OK; } Status ClearList(SqList &L)//6清空顺序表 { 	L.length=0; 	return OK; } Status DestorySqList(SqList &L)//7销毁顺序表 { 	if(L.elem) delete[]L.elem; 	return OK; } int LengthList(SqList L)//10取表的长度 { 	return L.length; } int main() { 	SqList L; 	Student e; 	int number,N; 	char na[20]; 	printf("1-初始化顺序表\n"); 	printf("2-创建学生信息表\n"); 	printf("3-查找学生信息表\n"); 	printf("4-显示学生信息\n"); 	printf("5-删除信息表\n"); 	printf("6-插入学生信息\n"); 	printf("7-显示学生个数\n"); 	printf("8-根据姓名查找\n"); 	printf("0-退出程序\n"); 	number=-1; 	while(number!=0) 	{ 		printf("请选择1~8的序号: "); 		scanf("%d",&number); 		switch(number) 		{ 		case 1: 			if(InitList(L)) 				printf("初始化完成"); 			else 				printf("初始化失败"); 			break; 		case 2: 			printf("创建顺序表,请输入N个学生信息表"); 			scanf("%d",&N); 			for(j=0;j<N;j++) 			{ 				L.length++; 				scanf("%s%s%d",L.elem[j].no,L.elem[j].name,&L.elem[j].price); 			} 			break; 		case 3: 			printf("请输入第i个元素的序号: "); 			scanf("%d",&i); 			if(!Searchelem(L,i,e)) 				printf("查找失败\n"); 			else 				printf("%s%s%d",L.elem[i].no[8],L.elem[i].name[20],L.elem[i].price); 			break; 		case 4: 			DisplayList(L); 			break; 		case 5: 			printf("请输入第i个元素: "); 			scanf("%d",&i); 			if(DeleteList(L,i)) 				printf("删除成功\n"); 			else 				printf("删除失败\n"); 			break; 		case 6: 			printf("请输入第i个元素: "); 			scanf("%d",&i); 			printf("请输入要插入学生的信息:1511 支付宝 100,每个数据之间空格隔开\n"); 			scanf("%s%s%d",e.no,e.name,e.price); 			if(InsertList(L,i,e)) 				printf("插入成功"); 			else 				printf("插入失败"); 			break; 		case 7: 			printf("这个顺序表的长度为%d:LengthList(L)"); 			break; 		case 8: 			printf("请输入要查找的名字"); 			scanf("%s",na); 			if(SearchElemName(L,e.name)) 				printf("%s%d\n",L.elem[j].no,L.elem[j].price); 			else 				printf("查找失败\n"); 			break; 		case 0: 			number=0; 			break; 		} 	} 	return 0; }

user: user-0
content: 可能是格式输入的问题，但是我又找不出问题？

user: user-2
content: 什么问题呢？ 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-0
content: 哪位大神可以帮我看看