每次总是把两个字符串输入完之后就不能输入了,然后就如下图了
怎么回事,谁能解释一下?
1、scanf("%d",&n);用户输入了数据按回车之后,输入会产生一个缓存\n’。之后在第一次使用gets()时就会读取到输入缓存里的‘\n’,就会读取一个空字符串给a.num,再次输入的字符串会赋值给a.name。
2、建议在gets上边使用getchar()把缓存里的‘\n’读取掉就可以了
3、结构体中num和name需要指定长度,例如char num[8]和char name[10]
4、函数形参值是不可修改的,你的input函数传入的形参 struct Student a 需要修改成指针的形式,所有修改之后参考代码如下:
struct Student {
char num[8];
char name[10];
int r1;
int r2;
int r3;
};
void input(struct Student *a);
void print(struct Student a);
int main() {
int N;
scanf("%d", &N);
struct Student A;
while (N) {
input(&A);
print(A);
N--;
}
return 0;
}
void input(struct Student *a) {
getchar();
gets((*a).num);
gets((*a).name);
scanf("%d", &(*a).r1);
scanf("%d", &(*a).r2);
scanf("%d", &(*a).r3);
}
void print(struct Student a) {
printf("%s %s %d %d %d\n", a.num, a.name, a.r1, a.r2, a.r3);
}