C语言,执行顺序表的操作出现了语句不按编写的顺序运行的情况。求大神帮忙解决。

有问题的是1操作和4操作。
第一问题:输入元素个数后,没有出现输入元素提示,而是在你输入完元素后才出现提示。
第二问题:回车执行4操作时,得再输入一个操作才会执行4操作。
附部分代码:

#include <stdio.h>

#define MAXSIZE 30
typedef int ElemType;
typedef int status;
typedef struct{
ElemType *elem;
int length;
}SqList;

//顺序表创建及输入元素
status InitListandinput_Sq(SqList &L){
int i,n;

L.elem=new ElemType[MAXSIZE];
if(!L.elem) return 0;

printf("请输入元素个数:");
scanf("%d\n",&n);
L.length=n;
printf("请输入元素:");
for(i=0;i<L.length;i++) scanf("%d",&L.elem[i]);
printf("你输入的元素为");
for(i=0;i<L.length;i++) printf(" %d",L.elem[i]);
printf("\n");
return 0;
}

//顺序表冒泡法排序
status Sort_Sq(SqList L){
int i,j,temp;
for(i=0;i<L.length-1;i++)
for(j=0;j<L.length-1-i;j++)
if(L.elem[i]>L.elem[i+1]) {temp=L.elem[i];L.elem[i]=L.elem[i+1];L.elem[i+1]=temp;}
printf("序列:");
for(i=0;i<L.length;i++) printf("%d ",L.elem[i]);
printf("\n");
return 0;
}
//按值查找
status LocateElem_Sq(SqList L,ElemType e){
int i;
for(i=0;i<L.length;i++)
if(L.elem[i]==e) return i+1;
return 0;
}
int main()
{
SqList Sq;int a,x,e;
printf("\t1.创建顺序表并键入输出元素\n");printf("\t2.顺序表就地逆置\n");
printf("\t3.顺序表冒泡法排序\n");printf("\t4.顺序表按值查找\n");printf("\t0.退出\n");
printf("\n");
while(a)
{
printf("请输入操作序号");
scanf("%d",&a);
switch(a)
{
case 1:

InitListandinput_Sq(Sq);break;
case 2:Invert_Sq(Sq);break;
case 3:Sort_Sq(Sq);break;
case 4:
printf("请输入查找值:");
scanf("%d\n",&e);
x=LocateElem_Sq(Sq,e);
printf("该值序号:%d",x);break;
case 0:break;
default: printf("输入错误\n");
}//switch
printf("\n");
}//while
return 0;
}
图片中第一个3那里是我按多一个回车的。

scanf("%d\n",&n);scanf("%d\n",&e);两个问题都是这样引起的,输入一个数加一个回车,所以变了输入一个数再加两个回车,第一个问题只要你不加第二个回车,数据会储在缓冲区,直到你输入回车后才scanf追问

如果像你所说的那样,求修改问题代码。

追答

凡scanf里面都不加\n就行了

温馨提示:答案为网友推荐,仅供参考
相似回答