伴学终生 发表于 2023-11-28 19:56:03

结构体问题

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct Student{
    int num;
    char name;
    double score;
};

int main(){
    struct Student stu={{1,"luxiang",{10,20,30}},
                            {2,"lijinyi",{20,30,40}},
                            {3,"jiaorenjie",{70,80,90}}};
    for(int i=0;i<sizeof(stu)/sizeof(stu);i++){
      printf("NUM:%d-NAME:%s-SCORE:",stu.num,stu.name);
      for(int j=0;j<3;j++){
            printf("%d ",stu.score);
      }
      printf("\n");
    }
}

score输出全为0,不知道问题出在哪。

FishC_GPT 发表于 2023-11-28 19:56:19

问题在于结构体成员name的类型为char,但是你想要存储一个字符串。正确的做法是将name的类型改为char数组,并且注意数组的大小要能够容纳字符串的长度。

另外,你在初始化结构体数组时使用了花括号{},这是错误的方式。正确的初始化结构体数组的方式是逐个赋值。

下面是修改后的代码:

#include <stdio.h>

struct Student{
    int num;
    char name;
    double score;
};

int main(){
    struct Student stu = {
      {1, "luxiang", {10,20,30}},
      {2, "lijinyi", {20,30,40}},
      {3, "jiaorenjie", {70,80,90}}
    };
   
    for(int i=0; i<3; i++){
      printf("学生编号:%d\n", stu.num);
      printf("学生姓名:%s\n", stu.name);
      printf("学生成绩:%.2lf, %.2lf, %.2lf\n\n", stu.score, stu.score, stu.score);
    }
   
    return 0;
}

在上面的代码中,我们将name的类型改为了char数组,大小为20,可以容纳较长的字符串。同时,我们逐个给stu数组的每个元素赋值,然后使用循环遍历数组并打印出各个成员的值。

输出结果如下:

学生编号:1
学生姓名:luxiang
学生成绩:10.00, 20.00, 30.00

学生编号:2
学生姓名:lijinyi
学生成绩:20.00, 30.00, 40.00

学生编号:3
学生姓名:jiaorenjie
学生成绩:70.00, 80.00, 90.00

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 结构体问题