![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
C语言结构体数组循环输入赋值,为什么只能赋值一次?
#include<stdio.h>typedefstruct_xuesheng{charname[20];intxuehao;intshuxue;intyingyu;in...
#include<stdio.h>
typedef struct _xuesheng{
char name[20];
int xuehao;
int shuxue;
int yingyu;
int cyuyan;
int zhongfen;
}xs;
int main()
{
xs x[2];
int i = 0;
printf("请依次输入姓名,学号,数学成绩,英语成绩,C语言成绩\n:");
for (i = 0; i < 2; i++){
gets_s(x[i].name, 20);
scanf_s("%d%d%d%d", &x[i].xuehao, &x[i].shuxue, &x[i].yingyu, &x[i].cyuyan);
x[i].zhongfen = x[i].shuxue + x[i].yingyu + x[i].cyuyan;
}
for (i = 0; i < 2; i++){
printf("学生%d:\n",i+1);
printf("姓名:%s\n", x[i].name);
printf("学号:%d\n数学:%d\n英语:%d\nc语言:%d\n总分:%d\n",
x[i].xuehao, x[i].shuxue, x[i].yingyu, x[i].cyuyan, x[i].zhongfen);
}
return 0;
}
输入到李四的时候,就不能输入了,百思不得其解啊。
不知道是哪里错了 展开
typedef struct _xuesheng{
char name[20];
int xuehao;
int shuxue;
int yingyu;
int cyuyan;
int zhongfen;
}xs;
int main()
{
xs x[2];
int i = 0;
printf("请依次输入姓名,学号,数学成绩,英语成绩,C语言成绩\n:");
for (i = 0; i < 2; i++){
gets_s(x[i].name, 20);
scanf_s("%d%d%d%d", &x[i].xuehao, &x[i].shuxue, &x[i].yingyu, &x[i].cyuyan);
x[i].zhongfen = x[i].shuxue + x[i].yingyu + x[i].cyuyan;
}
for (i = 0; i < 2; i++){
printf("学生%d:\n",i+1);
printf("姓名:%s\n", x[i].name);
printf("学号:%d\n数学:%d\n英语:%d\nc语言:%d\n总分:%d\n",
x[i].xuehao, x[i].shuxue, x[i].yingyu, x[i].cyuyan, x[i].zhongfen);
}
return 0;
}
输入到李四的时候,就不能输入了,百思不得其解啊。
不知道是哪里错了 展开
展开全部
不要用gets()函数,这个函数会从输入缓冲区开始读入数据,直到碰到'\0'为止;
因此你上一次输入的回车符在下一次的gets()时会被自动读入
改用
scanf_s("%s%d%d%d%d", x[i].name,20,&x[i].xuehao, &x[i].shuxue, &x[i].yingyu, &x[i].cyuyan);
x[i].zhongfen = x[i].shuxue + x[i].yingyu + x[i].cyuyan;
}
即可。
因此你上一次输入的回车符在下一次的gets()时会被自动读入
改用
scanf_s("%s%d%d%d%d", x[i].name,20,&x[i].xuehao, &x[i].shuxue, &x[i].yingyu, &x[i].cyuyan);
x[i].zhongfen = x[i].shuxue + x[i].yingyu + x[i].cyuyan;
}
即可。
展开全部
在scanf_s后面加上一句getchar();
有可能是输入第二行之后的那个回车被第二次循环的gets接收了。
有可能是输入第二行之后的那个回车被第二次循环的gets接收了。
追问
对就是这样,刚提完问题,就发现了,还是要多想啊,但是你那个在scanf_s后面加getschar()这个是什么意思?
追答
getchar()是从输入流里取一个字符,因为scanf_s是遇到空格和回车就被截断的,所以在第二行输入之后,输入流中会有个\n,如果不把它读出来,那么在第二次循环时,会被读入到[i].name中。通过getchar把\n取出来后,就不再影响第二次循环”李四“的输入了。
呃,你采纳的那个人的说法是错误的,gets不是遇到‘\0'之后结束,而是遇到'\n'结束
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询