关于malloc和scanf,%c,%s的有关问题

关于malloc和scanf,%c,%s的问题
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main()
{
int n;
int i;
scanf("%d",&n);
char * temp=(char *)malloc(sizeof(char)*n);
memset(temp,0,sizeof(char)*n);
for(i=0;i<n;i++)
{
scanf("%c",&temp[i]);
}
for(i=0;i<n;i++)
{
printf("%c",temp[i]);
}
        free(temp);
}关于malloc和scanf,%c,%s的有关问题

 输入abcde之后按回车,事实上的temp中只存了abcd四个元素,但是输出中却多了一个回车符,这是为什么啊
然后,将scanf()语句中的%c改成 %s  就行了,结果如下:
关于malloc和scanf,%c,%s的有关问题

------解决方案--------------------
scanf("%d",&n);
getchar();
char * temp=(char *)malloc(sizeof(char)*n);
memset(temp,0,sizeof(char)*n);
for(i=0;i<n;i++)
{
scanf("%c",&temp[i]);
}
中间加入一个getchar();
scanf("%c",&temp[i]);
第一个语句获得的是你输入n值后的回车符,