C 为什么我的输出会给出一个垃圾值?
我正在学习结构和函数,并试图将指向结构的指针作为参数传递。我的代码是输入学生姓名、年龄和分数。这是我的节目C 为什么我的输出会给出一个垃圾值?,c,function,pointers,struct,structure,C,Function,Pointers,Struct,Structure,我正在学习结构和函数,并试图将指向结构的指针作为参数传递。我的代码是输入学生姓名、年龄和分数。这是我的节目 #包括 #包括 #包括 结构学生{ 字符名[15]; 智力年龄; 双标记; }; void display(); int main(){ 结构学生*s1; s1=(结构学生*)malloc(结构学生的大小); for(int i=0;iname); printf(“输入年龄:”); scanf(“%d”,&s1->age); printf(“输入标记:”); scanf(“%f”和&s1-
#包括
#包括
#包括
结构学生{
字符名[15];
智力年龄;
双标记;
};
void display();
int main(){
结构学生*s1;
s1=(结构学生*)malloc(结构学生的大小);
for(int i=0;iname);
printf(“输入年龄:”);
scanf(“%d”,&s1->age);
printf(“输入标记:”);
scanf(“%f”和&s1->marks);
}
显示(&s1);
}
无效显示(结构学生*s1){
printf(“\nName\tAge\tMarks\n”);
for(int i=0;iname);
printf(“\n管理:%d”,s1->age);
printf(“\n标记:%.2lf”,s1->marks);
}
}
代码运行,但它给出了错误的输出和垃圾值。我做错了什么
有几个语法错误。我在下面的代码中包含了文档 此外,每次提示用户输入时,都会覆盖s1的内容。使用两个不同的数据测试它,例如(姓名:“alex”,年龄:19,mark:100.0和姓名:“jason”,年龄:22,mark:100.0),您的程序将只输出后面的数据 为了解决这个问题,我建议您在循环之前分配学生指针,这样每个学生都有两个不同的内存,在这种情况下不会覆盖它们 基本上,每个student结构都被视为一个数组,而不是s1->name,您将它们作为s1[i].name取消引用 显示函数声明
void display(struct student *s1);
主要功能
int main()
{
int i;
struct student *s1;
s1 =(struct student *) malloc(sizeof(struct student) * 2); /* 2 = number of students */
for(i=0; i<2; i++)
{
printf("\nEnter details of student %d\n\n", i+1);
printf("Enter name: ");
scanf("%s", s1[i].name);
printf("Enter age: ");
scanf("%d", &s1[i].age);
printf("Enter marks: ");
scanf("%lf", &s1[i].marks); /* Instead of %f, it should be %lf */
}
display(s1); /* Instead of &, it should be s1 */
/* Free heap memory */
for(i=0; i<2; i++)
{
free(s1);
s1 = NULL;
}
return 0;
}
变量
s1
的类型(已经)是struct student*
。因此,&s1
属于struct student**
类型,这意味着您需要调用display(s1)
,而不是display(&s1)
。顺便说一句,我甚至不知道这段代码是如何编译的。顺便说一句,我不知道你希望在for(int I=0;Iscanf(“%f”,&s1->marks);
=>scanf(“%lf”,&s1->marks);
for adouble
类型中实现什么。@goodvibration我要求两个输入,这就是为什么它是for(int I=0;i@WeatherVane谢谢我没注意到
int main()
{
int i;
struct student *s1;
s1 =(struct student *) malloc(sizeof(struct student) * 2); /* 2 = number of students */
for(i=0; i<2; i++)
{
printf("\nEnter details of student %d\n\n", i+1);
printf("Enter name: ");
scanf("%s", s1[i].name);
printf("Enter age: ");
scanf("%d", &s1[i].age);
printf("Enter marks: ");
scanf("%lf", &s1[i].marks); /* Instead of %f, it should be %lf */
}
display(s1); /* Instead of &, it should be s1 */
/* Free heap memory */
for(i=0; i<2; i++)
{
free(s1);
s1 = NULL;
}
return 0;
}
void display(struct student *s1)
{
int i;
printf("\nName\tAge\tMarks\n");
for(i = 0; i<2;i++ )
{
printf("%s\t",s1[i].name);
printf("%d\t",s1[i].age);
printf("%.2f\t",s1[i].marks); /* Instead of %.2lf, it should be %.2f */
printf("\n");
}
}
struct student
{
char name[15];
int age;
double marks;
};