一次循环使用两次printf
#include
#include
#include"SqStack.h"
main.cpp
int main(){
SqStack S;
char e,p;
int n;
InitStack(S);
printf("请输入:");
scanf("%c",&e);
while(e!='&'){
Push(S,e);
printf("入栈成功\n");
printf("请继续输入:");
scanf("%c",&e);
}
printf("请继续输入:");
scanf("%c",&e);
while(e!='@'&&S.top!=S.base){
p=Pop(S);
if(e!=p){
printf("no");
return 0;
}
printf("出栈成功\n");
printf("请继续输入:");
scanf("%c",&e);
}
if(S.top=S.base)printf("yes");
}
SqStack.h
#include
#include
#define MaxSize 100
#define StackinCrement 10
typedef struct SqStack{
char top; //栈顶指针
char base; //栈底指针
int stacksize; //栈可用最大容量
}SqStack;
//初始化
InitStack(SqStack &S){
S.base = (char)malloc( MaxSizesizeof(char) );
if(!S.base)
printf("分配存储空间失败"); //存储分配失败
S.top = S.base; //栈顶指针等于栈底指针
S.stacksize = MaxSize;
printf("初始化成功\n");
return 0;
}
//顺序栈的入栈
void Push(SqStack &S,char e)
{
if(S.top - S.base >= S.stacksize) //栈满,扩容
{
S.base = (char*)realloc(S.base,(S.stacksize +StackinCrement)*sizeof(char));
if(!S.base)
printf("分配存储空间失败");
S.top = S.base + S.stacksize;
S.stacksize += StackinCrement;
}
*S.top++ =e;
}
//顺序栈的出栈
char Pop(SqStack &S){
char e;
if(S.top == S.base)
printf("无出栈的");
e = *--S.top;
return e;
}
换行也是字符,你不写个getchar把它读进来,那么scanf里就会接受到一个换行
修改完善如下,供参考:
//SqStack.h
#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
#define StackinCrement 10
typedef struct SqStack {
char *top; //栈顶指针
char *base; //栈底指针
int stacksize; //栈可用最大容量
}SqStack;
//初始化
int InitStack(SqStack& S) { //修改
S.base = (char*)malloc(MaxSize*sizeof(char));
if (!S.base) {
printf("分配存储空间失败"); //存储分配失败
return -1; //修改
}
S.top = S.base; //栈顶指针等于栈底指针
S.stacksize = MaxSize;
printf("初始化成功\n");
return 0;
}
//顺序栈的入栈
void Push(SqStack& S, char e)
{
if (S.top - S.base >= S.stacksize) //栈满,扩容
{
S.base = (char*)realloc(S.base, (S.stacksize + StackinCrement) * sizeof(char));
if (!S.base) {
printf("分配存储空间失败");
return; //修改
}
S.top = S.base + S.stacksize;
S.stacksize += StackinCrement;
}
*S.top++ = e;
}
//顺序栈的出栈
char Pop(SqStack& S) {
char e;
if (S.top == S.base) {
printf("栈已空\n");
e = '\0'; //修改
return e; //修改
}
e = *--S.top;
return e;
}
//#include <stdio.h>
//#include <malloc.h>
//#include"SqStack.h"
//main.cpp
int main() {
SqStack S;
char e, p;
int n;
InitStack(S);
printf("请输入:");
scanf(" %c", &e); //修改
while (e != '&') {
Push(S, e);
printf("入栈成功\n");
printf("请继续输入:");
scanf(" %c", &e); //修改
}
//printf("请继续输入:"); //修改
//scanf(" %c", &e); //修改
while (S.top != S.base) { //(e != '@' && S.top != S.base)
p = Pop(S);
//if (e != p) { //修改
// printf("no\n"); //修改
// return 0; //修改
//}
printf("出栈成功:%c\n", p); //修改
//printf("请继续输入:"); //修改
//scanf(" %c", &e); //修改
}
if (S.top == S.base) printf("yes"); //if (S.top = S.base) 修改
}