鱼C论坛

 找回密码
 立即注册
查看: 757|回复: 1

[已解决]结构体问题

[复制链接]
发表于 2023-11-28 19:56:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>

  4. struct Student{
  5.     int num;
  6.     char name[20];
  7.     double score[3];
  8. };

  9. int main(){
  10.     struct Student stu[3]={{1,"luxiang",{10,20,30}},
  11.                             {2,"lijinyi",{20,30,40}},
  12.                             {3,"jiaorenjie",{70,80,90}}};
  13.     for(int i=0;i<sizeof(stu)/sizeof(stu[0]);i++){
  14.         printf("NUM:%d-NAME:%s-SCORE:",stu[i].num,stu[i].name);
  15.         for(int j=0;j<3;j++){
  16.             printf("%d ",stu[i].score[j]);
  17.         }
  18.         printf("\n");
  19.     }
  20. }
复制代码


score输出全为0,不知道问题出在哪。
最佳答案
2023-11-28 19:56:19
问题在于结构体成员name的类型为char,但是你想要存储一个字符串。正确的做法是将name的类型改为char数组,并且注意数组的大小要能够容纳字符串的长度。

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

下面是修改后的代码:

#include <stdio.h>

struct Student{
    int num;
    char name[20];
    double score[3];
};

int main(){
    struct Student stu[3] = {
        {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[0], stu.score[1], stu.score[2]);
    }
   
    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官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-28 19:56:19 | 显示全部楼层    本楼为最佳答案   
问题在于结构体成员name的类型为char,但是你想要存储一个字符串。正确的做法是将name的类型改为char数组,并且注意数组的大小要能够容纳字符串的长度。

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

下面是修改后的代码:

#include <stdio.h>

struct Student{
    int num;
    char name[20];
    double score[3];
};

int main(){
    struct Student stu[3] = {
        {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[0], stu.score[1], stu.score[2]);
    }
   
    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官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-3 08:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表