![]() |
#2
rjsp2020-06-02 13:17
|
问题:scanf为结构体数组赋值时,成员数组最后一个值总是被下一次scanf的输入值覆盖。
请看源程序:

#include<stdio.h>
#include<stdlib.h>
typedef struct
{
int num;
char name[5];
int score[2];
}Student;
void main() {
void printdata(Student*,int);
Student s[2];
int lp = 0;
for (lp = 0; lp <= 2; lp++)
{
printf("record num score*3\n");
scanf_s("%d %d %d %d", &s[lp].num, &s[lp].score[0], &s[lp].score[1], &s[lp].score[2]);
fflush(stdin);//清空输入流
printf("name\n");
scanf_s("%s", s[lp].name,6);
fflush(stdin);//清空输入流
printf("%d", s[lp].score[2]);//被覆盖的值在本轮内赋值是没问题的
}
printf("num name score1 score2 score3\n");
for (lp = 0; lp <= 2; lp++)
{
printf("%3d %4s %6d %6d %6d\n", s[lp].num, s[lp].name, s[lp].score[0], s[lp].score[1], s[lp].score[2]);
}
system("pause");
#include<stdlib.h>
typedef struct
{
int num;
char name[5];
int score[2];
}Student;
void main() {
void printdata(Student*,int);
Student s[2];
int lp = 0;
for (lp = 0; lp <= 2; lp++)
{
printf("record num score*3\n");
scanf_s("%d %d %d %d", &s[lp].num, &s[lp].score[0], &s[lp].score[1], &s[lp].score[2]);
fflush(stdin);//清空输入流
printf("name\n");
scanf_s("%s", s[lp].name,6);
fflush(stdin);//清空输入流
printf("%d", s[lp].score[2]);//被覆盖的值在本轮内赋值是没问题的
}
printf("num name score1 score2 score3\n");
for (lp = 0; lp <= 2; lp++)
{
printf("%3d %4s %6d %6d %6d\n", s[lp].num, s[lp].name, s[lp].score[0], s[lp].score[1], s[lp].score[2]);
}
system("pause");
只有本站会员才能查看附件,请 登录
就是说s.score[2]的值被s+1.num的值覆盖了,这是为何呀,求大神们解答。
此外还有一事相求,不知为何visual studio的“局部变量”似乎并没有显示结构体变量成员的值,不知道各位有没有什么方法能够看到它们,或者有好的plugin推荐。
初学菜菜感激不尽。