关于scanf和getchar的问题?

作为刚学c语言的小白,有一点不太明白,在下面两段类似的程序中。

                int main()
                {
                int a;
                scanf("%c",&a);
                printf("%d",a);
                return 0;
                int main()
                {
                int a;
                a=getchar();
                printf("%d",a);
                return 0;

二者程序都输入a,前者输出的a无论多少次都是32609,而后者则为正常的ASCII码97。
不太明白这其中的原因

在scanf函数的格式控制中,格式说明的类型与输入项的类型必须一一对应匹配,如不匹配将导致数据输入出现错误,但是系统并不报错。所以其实用scanf,a的输入有误