C程序有关问题.求解!

C程序问题....求解!!!!!
问题出在代码的倒数第四行,程序运行到那个 scanf 函数时并不停下来从键盘读一个字符给变量 ch ,直接就运行完了是肿么回事!!!! 求解呀!!!!!

代码如下:
#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10

typedef struct SQLIST
{
char *elem;
int length;
int listsize;
}SqList;

void InitList_Sq(SqList *L)
{
L->elem = (char *)malloc(LIST_INIT_SIZE * sizeof(char));
if(!L->elem)
exit(-2);
L->length = 0;
L->listsize = LIST_INIT_SIZE;
}

int ListInsert_Sq(SqList *L, int i, char e)
{
char *newbase, *p, *q;
if((i < 1) || (i > L->length + 1))
return 0;
if(L->length >= L->listsize)
{
newbase = (char *)realloc(L->elem, (L->listsize + LISTINCREMENT) * sizeof(char));
if(!newbase)
exit (-2);
L->elem = newbase;
L->listsize += LISTINCREMENT;
}
q = &(L->elem[i - 1]);
for(p = &(L->elem[L->length - 1]); p >= q; --p)
*(p + 1) = *p;
*q = e;
++L->length;
return 1;
}

int ListDelete_Sq(SqList *L, int i)
{
char *p, *q;
if((i < 1) || (i > L->length))
return 0;
p = &(L->elem[i - 1]);
printf("第 %d 个元素 %c 被删除!\n", i, *p);
q = L->elem + L->length - 1;
for(++p; p <= q; ++p)
*(p - 1) = *p;
--L->length;
return 1;
}

int LocateElem_Sq(SqList L, int e)
{
char *p;
int i = 1;
p = L.elem;
while(i <= L.length && *p != e)
{
p++;
i++;
}
if (i <= L.length)
return i;
else return 0;
}

int main(void)
{
SqList L;
char ch;
int i = 1, j, k;

InitList_Sq(&L);
printf("请输入要插入的元素:\n");
ch = getchar();
while(ch != '#')
{
ListInsert_Sq(&L, i, ch);
++i;
ch = getchar();
}
for(j = 0; j < i - 1; j++)
{
printf("%c",L.elem[j]);
}
printf("\n要删除第几个元素:k= ");
scanf("%d",&k);
ListDelete_Sq(&L, k);
for(j = 0; j < i - 2; j++)
{
printf("%c",L.elem[j]);
}
printf("\n请输入要查询的元素:ch = ");
scanf("%c", &ch); //程序不在这里停下来是肿么回事!!!
printf("\n它是第 %d 号元素!\n", LocateElem_Sq(L, ch));
return 0;
}

------解决方案--------------------
因为误捕足前面的输入的回车符造成的。
改为:
char ch2;
printf("\n请输入要查询的元素:ch = ");
scanf("%c%c", &ch2, &ch);
------解决方案--------------------
看了下,并不是程序不停在那里,而是程序跑到那里的时候接收到了一个字符,因为你在输入要删除的元素后按了下回车键或者空格键,而这个回车键或者空格键的ASCII码正好被(scanf("%c", &ch);)这句代码接收了。
你再定义一个char型变量ch1,然后在(scanf("%c", &ch);)之前再加一句(scanf("%c", &ch1);),让前一句把那个空格或回车接收掉,就OK了
还有,就是你的程序的功能还有问题。。单步调试一下吧