上述代码执行过程:
1、第一个scanf()函数等待用户输入;
2、用户输入6,同时6作为ASCII码值存储在缓冲区;
3、第一个scanf()函数读取整型ASCII值到s.num,故此刻整型s.num=6
4、用户敲下回车键,同时回车键(换行符’\n’)转化为ASCII码(10)值存入缓冲区;
5、缓冲区已有数据,直接读取缓冲区数据,第二个scanf()函数读取用户输入的'\n'
6、所以输入6个实际只读了5个+上次的'\n'。
7.输出'\n'+5个字符
————————————————
解决:用getchar()来接收多余的回车键
struct jihe{
char a[10];
int num;
}s;
int main()
{
int i,j;
char c;
printf("元素个数:");
scanf("%d",&s.num);
while((c=getchar())!='\n') //getchar()来接收多余的回车键
continue;
printf("请输入:");
for(i=0;i<s.num;i++)
scanf("%c",&s.a[i]);
printf("打印结果为:");
for(i=0;i<s.num;i++)
printf("%c",s.a[i]);
}