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);
}
给你个例子吧
函数按值拷贝传参啊,你可以了解一下 函数按值传参,引用传参,地址传参。
你在输入的时候,input()函数的参数是一个变量,在使用的时候是拷贝传参,内部做相关赋值动作,外部会不生效的,你是这给参数用引用或者地址传参的方式进行赋值~