堆叠与单个字符作为元素

时间:2017-10-29 13:02:18

标签: c++ string stack printf scanf

所以这里是创建和打印堆栈的代码,每个元素都是一个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”

我该如何解决?

3 个答案:

答案 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);之后尝试了您的代码,但它确实有效。

在此之前我有分段错误。