1.getchar可冲缓冲区读走一个字符,相当于清楚缓冲区;
2.前面的scanf()在读取输入时会在缓冲区中留下一个字符’\n’(输入完a[i]的值后按回车键所致),所以如果不在此加一个getchar()把这个回车符取走的话,gets()就不会等待从键盘键入字符,而是会直接取走这个“无用的”回车符,从而导致读取有误;
题解如下:
#include <stdio.h>
int main()
{
    int n,m,i,a[20];
    while(~scanf("%d",&n))
    {
        for(i=0; i<n; i++)
        {
            scanf("%d",&a[i]);
            getchar();
        }
        scanf("%d",&m);
        for(i=0; i<n; i++)
            if(m == a[i])
                break;
        if(i<n)
            printf("%d\n",i);
        else
            printf("No\n");
    }
}