鱼C论坛

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

[已解决]结构体问题

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

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

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

x
#include <stdio.h>
#include <string.h>
#include <stdlib.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<sizeof(stu)/sizeof(stu[0]);i++){
        printf("NUM:%d-NAME:%s-SCORE:",stu[i].num,stu[i].name);
        for(int j=0;j<3;j++){
            printf("%d ",stu[i].score[j]);
        }
        printf("\n");
    }
}

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[i].num);
        printf("学生姓名:%s\n", stu[i].name);
        printf("学生成绩:%.2lf, %.2lf, %.2lf\n\n", stu[i].score[0], stu[i].score[1], stu[i].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[i].num);
        printf("学生姓名:%s\n", stu[i].name);
        printf("学生成绩:%.2lf, %.2lf, %.2lf\n\n", stu[i].score[0], stu[i].score[1], stu[i].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-11-23 11:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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