所以这里是创建和打印堆栈的代码,每个元素都是一个char:
#define max 100
struct stack
{
int top;
char data[max];
};
void initialize (stack &s)
{
s.top=0;
}
void push(stack &s, char x)
{
s.data[s.top]=x;
s.top ++;
}
void create (stack &s, int n) //n is the number of elements
{
char x;
for(int i=0;i<n;i++)
{
printf("Enter the char to push in: ");
scanf(" %c",&x);
push(s,x);
}
}
void print (stack s)
{
int a;
printf("\nStack:\n");
for(a=s.top-1;a>=0;a--)
{
printf(" %c",s.data[a]);
}
}
int main()
{
int n;
stack s;
printf("Enter the number of stack elements:");
scanf("%d",&n);
create(s,n);
print(s);
}
现在我遇到的问题是上面的代码运行正常,我可以创建一个堆栈并将单个字符推入其中。但是当它将元素打印到屏幕时,结果总是存在这些垃圾字符: @'1 。
例如:如果我输入“C o o l!”然后打印出“!l o o C @'1”
我该如何解决?
答案 0 :(得分:2)
您没有初始化堆栈。 试试这个:
int main()
{
int n;
stack s;
printf("Enter the number of stack elements:");
scanf("%d",&n);
initialize(s);
create(s,n);
print(s);
return 0;
}
答案 1 :(得分:2)
您不能在initialize()
之前致电create()
,这意味着stack.top
未初始化,在访问时会调用未定义的行为。
将您的主要功能更改为:
stack s;
initialize(s);
...
create(s,n);
答案 2 :(得分:1)
我在initialize(s);
之前添加create(s,n);
之后尝试了您的代码,但它确实有效。
在此之前我有分段错误。