^z之后scanf不被执行直接跳过是怎么回事
#include
#define MaxSize 105
typedef int ElemType;//顺序表元素类型是整数
typedef struct{
ElemType a[MaxSize];//顺序表的元素
int n;//顺序表的长度
}SeqList;
//0.输出函数
void print(SeqList sq);
//1.创建顺序表sq,写操作要用指针
void create(SeqList *sq);
//2.在顺序表sq第i个位置插入item
int insert (SeqList *sq,int i,ElemType item);
int main(){
int p,x;
SeqList sq;
sq.n=0;
printf("1.创建顺序表\n");
create(&sq);
print(sq);
printf("2.顺序表的插入操作:\n");
scanf("%d %d",&p,&x);
printf("%d %d",p,x);
if(insert(&sq,p,x) == -1) {
printf("插入失败\n");
}
else print (sq);
return 0;
}
void print(SeqList sq)
{int i;
printf("顺序表的长度是: %d\n",sq.n);
for( i = 0;i < sq.n; i++){
printf("%d ",sq.a[i]);
}
printf("\n");
}
void create(SeqList *sq)
{
int n = 0,x;
while(scanf("%d",&x) == 1){
sq->a[n] = x;
n++;
}
sq->n = n;
}
int insert (SeqList *sq,int i,ElemType item)
{ if(sq->n == MaxSize || i<1 || i > sq->n+1)
{
return -1;
}int j;
//1.[i - 1,n - 1] 的元素从后往前依次后移一个位置
for( j = sq->n - 1;j >= i - 1;j--){
sq->a[j + 1] = sq->a[j];
}
//2.插入元素item到i-1
sq->a[i-1] = item;
// 3.修改表的长度
(sq->n)++;
return 1;
}
你输入了^Z之后,因为scanf的参数是%d,所以并不会把它取走,而是遗留在缓冲区里
你要再次读入数据之前,应该先用getchar之类的命令把它取走,否则你后续的scanf依然取到的是^Z