新手求大神指点一上这程序,是字符串倒置的程序

新手求大神指点一下这程序,是字符串倒置的程序,
#include<stdio.h> 
void main() 
{
char a[20],*p,*q,t;
int i,m,n;
printf("输入n的值\n");
scanf("%d",&n);
printf("输入字符串\n");
for(i=0;i<n;i++)
scanf("%c",&a[i]);
printf("\n");
p=a;
q=(a+n);
if(n%2==0)
m=n/2;
else m=n/2-1;
for (i=0;i<=m;p++,q--,i++)
{t=*q;*q=*p;*p=t;}
for(i=0;i<n;i++)
printf("%c",a[i]);
printf("\n"); }


------解决思路----------------------
主要问题是在输入整数后我们一般后接一个空格或回车,但该空格或回车还停留在输入区造成的问题.
另一个问题在程序设计的问题,输入字符串可以用scanf("%s", str),这样子方便啊
如果想要字符串中能有空格,就可以用gets(str)
或fgets(s, size, stdin);// 注意回车也算是字符串的有效字符

#include<stdio.h>
void main()
{
    char a[20],*p,*q,t;
    int i,m,n;

    printf("输入n的值\n");
    scanf("%d",&n);
    // 上面输入数字之后后面的空格或回车键还停留在输入缓冲区,
    // 它会作为下面输入字符的第一个字符,要跳过这个回车,加上
    getchar(); // 紧跟n后面的一个字符(回车或空格什么, 注意只有一个,)
                // 所以输入整数后输入太多空格或回车还是会有问题
    printf("输入字符串\n");
    for(i=0;i<n;i++)
        scanf("%c",&a[i]);
    printf("\n");

    // 你这个是没有结束符的字符串,建议加上,n不要越界
    a[n] = '\0';

    p=a;
    q=a+n - 1;  // n个字符最后一个是加上n-1
    for ( ; p < q; p++, q--) {    // 这么写简练多了
        t = *p;
        *p = *q;
        *q = t;
    }
    // 有结束符的字符串这样子输出
    printf("%s\n", a);
}

------解决思路----------------------
没细看代码,看二楼说的问题。
解决:输入n后加一个fflush(stdin);(貌似是这个),清空输入缓冲区。