在for循环中使用%c接收字符的时候,scanf("%d",&pyx)这里的回车符也会被接收,需要在这一句后面加一句getchar();
还有就是,在读取name的时候,因为for循环到i<10,所以强制要求输入10个字符,无法输入回车结束,需要对接收的字符进行处理,代码修改如下:
#include <stdio.h>
typedef int Score[3];
typedef char Name[10];
struct Person
{
int id;
Name name;
Score score;
};
int main()
{
int i;
Person pyx;
printf("\n请输入整数编号,回车结束:");
scanf_s("%d",&pyx.id);
getchar();//添加这一句
printf("\n请输入姓名字符串,回车结束:");
for(i=0;i<10;i++)
{
scanf_s("%c",&pyx.name[i],1); //这里必须加 ,1
//添加如下内容
if(pyx.name[i]== '\n')
{
pyx.name[i] = 0;
break;
}
}
printf("请输入三门课的整数成绩,没门成绩以回车结束");
for(i=0;i<3;i++)
scanf_s("%d",&pyx.score[i]);
printf("%d %s %d %d %d",pyx.id,pyx.name,pyx.score[0],pyx.score[1],pyx.score[2]);
return 0;
}
可以不用循环,直接使用gets(pyx.name);
第18行改为:scanf_s("%c",&pyx.name[i],1);
或者 : scanf_s("%s",pyx.name,10);