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;I
scanf(“%f”,&s1->marks);
=>scanf(“%lf”,&s1->marks);
for a
double
类型中实现什么。@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; 
};