栈和队列关于车厢排序的问题

内容:设车辆厂生产了硬座车厢和软座车厢共n节(混合在一起),要求用顺序栈的5种运算使所有的硬座车厢排列到软座车厢的前面。
程序如下:
#include
#define elemtype char
const int maxlen=20;
struct seqstack
{
elemtype stack[maxlen];
int top;
};
void inistack(seqstack &s)
{
s.top=0;
}
void push(seqstack &s,elemtype x)
{
if (s.top==maxlen-1)printf("overflow\n");
else
{
s.top++;
s.stack[s.top]=x;
}
}
void pop(seqstack&s)
{
if(s.top==0)printf("underflow\n");
else
{
s.top--;
}
}
elemtype gettop(seqstack s)
{
if (s.top==0){printf("underflow\n");return 0;}
else return s.stack[s.top];
}
int empty(seqstack s)
{
if (s.top==0) return 1;
else return 0;
}
void prtstack(seqstack &s)
{
int i;
for (i=1;i<=s.top;i++){
printf("&d",s.stack[i]);
}
}
void main(void)
{
int n,i;
elemtype x;
seqstack s_H;
seqstack s_S;
inistack(s_H);
inistack(s_S);
printf("请输入车厢数\n");
scanf("%d",&n);
printf("请输入%d节车厢代号(H代表硬座车厢,S代表软座车厢)\n",n);
if(n>maxlen)
{
printf("车厢数目太多\n");
return;
}
for (i=1;i<=n;i++)
{
scanf ("%d",&x);
if(x=='H')
push(s_H,x);
else if(x=='S')
push(s_S,x);
}
prtstack(s_H);
prtstack(s_S);
return ;
}

程序可以正常运行,可是输入完车厢数和车厢代号后就会自动跳出,求大神解答

主要有两个问题:
1.scanf ("%d",&x);改为scanf ("%c%*c",&x); //%*c用来吸收两个字符之间的空格
同时第一次scanf输入车厢数以后也要用getchar();或者fflush(stdin);来清空输入缓冲区遗留的回车符,否则%c会读取回车符
2.prtstack里应该用%c输出

 #include<stdio.h>
#define elemtype char
const int maxlen=20;
struct seqstack
{
    elemtype stack[maxlen];
    int top;
};
void inistack(seqstack &s)
{
    s.top=0;
}
void push(seqstack &s,elemtype x)
{
    if (s.top==maxlen-1)printf("overflow\n");
    else
    {
        s.top++;
        s.stack[s.top]=x;
    }
}
void pop(seqstack&s)
{
    if(s.top==0)printf("underflow\n");
    else
    {
        s.top--;
    }
}
elemtype gettop(seqstack s)
{
    if (s.top==0){printf("underflow\n");return 0;}
    else return s.stack[s.top];
}
int empty(seqstack s)
{
    if (s.top==0) return 1;
    else return 0;
}
void prtstack(seqstack &s)
{
    int i;
    for (i=1;i<=s.top;i++){
        printf("%c",s.stack[i]);
    }
}
void main(void)
{
    int n,i;
    elemtype x;
    seqstack s_H;
    seqstack s_S;
    inistack(s_H);
    inistack(s_S);
    printf("请输入车厢数\n");
    scanf("%d",&n);
    printf("请输入%d节车厢代号(H代表硬座车厢,S代表软座车厢)\n",n);
    if(n>maxlen)
    {
        printf("车厢数目太多\n");
        return;
    }
    getchar();
    for (i=1;i<=n;i++)
    {
        scanf ("%c%*c",&x);
        if(x=='H')
            push(s_H,x);
        else if(x=='S')
            push(s_S,x);
    }
    prtstack(s_H);
    prtstack(s_S);
    printf("\n");
    return ;
}

图片说明