循环输入有关问题,为什么会多输一个
循环输入问题,为什么会多输一个
当输入-1的时候,为什么后面还要输多一个数才能结束循环呢?
------解决思路----------------------
将scanf中%d后面的空格去掉再试试。
------解决思路----------------------
scanf("%d ",&num);
--->
scanf("%d",&num);
------解决思路----------------------
scanf("%d ", &num); //%d后的空格,会匹配最后的回车,导致scanf无法终止
直接使用scanf("%d", &num); 输入数字之间的空格会被scanf跳过,
------解决思路----------------------
两个数字之间的换行同样会被跳过
#include <stdio.h>
#include <stdlib.h>
struct sequence
{
int MAXCOUNT; //最大个数
int top; //栈顶元素位置
int *elem; //
};
typedef struct sequence Seq;
//创建一个空栈,大小为max
Seq *createStack(int max){
Seq *seq;
seq = (Seq*)malloc(sizeof(Seq));
seq->MAXCOUNT = max;
seq->elem = (int*)malloc(max * sizeof(int));
seq->top=-1;
return seq;
}
//判断是否为空栈
int isEmpty(Seq *seq){
if(seq->top==-1)
return 0;
else
return 1;
}
//进栈
void push(Seq *seq, int m){
if(seq->top== seq->MAXCOUNT-1){
printf("overflow\n");
}else{
seq->top = seq->top + 1;
seq->elem[seq->top] = m;
}
}
//出栈
void pop(Seq *seq){
if(seq->top==-1){
printf("underflow\n");
}else{
seq->top = seq->top - 1;
}
}
//取栈顶元素
int gainTopEle(Seq *seq){
if(seq->top==-1){
printf("It is empty\n");
return NULL;
}
return (seq->elem[seq->top]);
}
void main(){
int max;
printf("请输入栈的大小:");
scanf("%d",&max);
Seq *seq = createStack(max);
printf("请输入栈的元素(-1 结束):\n");
/*
for(int i=0; i<max; i++){
int num;
scanf("%d ",&num);
push(seq, num);
}
*/
int num;
do{
scanf("%d ",&num);
if(num!=-1)
push(seq, num);
}while(num!=-1);
while(isEmpty(seq)!=0){
printf("%d ", gainTopEle(seq));
pop(seq);
}
printf("\n end \n");
}
当输入-1的时候,为什么后面还要输多一个数才能结束循环呢?
------解决思路----------------------
将scanf中%d后面的空格去掉再试试。
------解决思路----------------------
scanf("%d ",&num);
--->
scanf("%d",&num);
------解决思路----------------------
scanf("%d ", &num); //%d后的空格,会匹配最后的回车,导致scanf无法终止
直接使用scanf("%d", &num); 输入数字之间的空格会被scanf跳过,
------解决思路----------------------
两个数字之间的换行同样会被跳过