精华内容
下载资源
问答
  • 结构体数组赋值

    2017-04-10 10:03:12
    上面的在main外赋值结构体数组可以,但是我希望在main里面赋值结构体数组,并且在自定义函数printfPolar里对这个要输入的数组进行一些操作,在main函数里赋值就会报错,这样就不行了: #include <iostream> ...
  • 1、单层结构体数组赋值 实现源码: #include <stdio.h> #include <stdint.h> #include <string.h> /*直接给结构体赋值*/ typedef struct _SSData { int ID[4]; int arr[2]; } SSData; void ...

    1、单层结构体数组赋值

    实现源码:

    #include <stdio.h>
    #include <stdint.h>
    #include <string.h>
    /*直接给结构体赋值*/
    typedef struct _SSData
    {
        int ID[4];
        int arr[2];
    } SSData;
    
    void main(void)
    {
        SSData ss;
        int i,p,q;
        ss.ID[0] = 11;
        ss.ID[1] = 12;
        ss.ID[2] = 13;
        ss.ID[3] = 14;
    
        ss.arr[0] = 2020;
        ss.arr[1] = 2021;
        for (i = 0; i < 4; i++)
        {
            p = ss.ID[i];
            printf("p------------------%d\n",p);
        }
    
        for (i = 0; i < 2; i++)
        {
            q = ss.arr[i];
            printf("q------------------%d\n", q);
        }
    
        printf("\n");
        getch();
        return 0;
    }
    

    执行结果:
    在这里插入图片描述

    另一种赋值方式:

    #include <stdio.h>
    #include <stdint.h>
    #include <string.h>
    /*直接给结构体赋值*/
    typedef struct _SSData
    {
        int ID[4];
        int arr[2];
    } SSData;
    
    void main(void)
    {
        int i, p, q;
        // SSData ss;
        // ss.ID[0] = 11;
        // ss.ID[1] = 12;
        // ss.ID[2] = 13;
        // ss.ID[3] = 14;
    
        // ss.arr[0] = 2020;
        // ss.arr[1] = 2021;
        SSData ss[1] =
            {
                {{11, 22, 13, 14}, {2020, 2021}},
            };
    
        for (i = 0; i < 4; i++)
        {
            p = ss->ID[i];
            printf("p==============%d\n",p);
        }
    
        for (i = 0; i < 2; i++)
        {
            q = ss->arr[i];
            printf("q==============%d\n", q);
        }
    
        printf("\n");
        getch();
        return 0;
    }
    

    执行结果:
    在这里插入图片描述

    2、双层结构体数组赋值

    #include <stdio.h>
    #include <stdint.h>
    #include <string.h>
    
    typedef struct _SSData0
    {
        int ID[4];
    } SSData0;
    
    /*直接给结构体赋值*/
    typedef struct _SSData
    {
        int arr[2];
        SSData0 test_data[1];//单个结构体属性成员
    } SSData;
    
    void main(void)
    {
        int i, p, q;
        // SSData ss;
        // ss.ID[0] = 11;
        // ss.ID[1] = 12;
        // ss.ID[2] = 13;
        // ss.ID[3] = 14;
    
        // ss.arr[0] = 2020;
        // ss.arr[1] = 2021;
    
    
        int ID[4] = {11, 22, 13, 14};
        SSData ss[1] =
            {
                {{2020, 2021}, {11, 12, 13, 14}}, 
            };
    
        for (i = 0; i < 4; i++)
        {
            p = ss->test_data->ID[i];//调用另一个结构体
            printf("p==============%d\n", p);
        }
    
        for (i = 0; i < 2; i++)
        {
            q = ss->arr[i]; 
            printf("q==============%d\n", q);
        }
    
        printf("\n");
        getch();
        return 0;
    }
    

    执行结果:
    在这里插入图片描述

    3、多层结构体数组的多层赋值

    将结构体属性元素改为:

    那么赋值为: SSData0 test_data[2];

        SSData ss[2] =
            {
                {{2020, 2021}, {11, 12, 13, 14}},
                {{2022, 2023}, {21, 22, 23, 24}},
            };
    

    源码:

    #include <stdio.h>
    #include <stdint.h>
    #include <string.h>
    
    typedef struct _SSData0
    {
        int ID[4];
    } SSData0;
    
    /*直接给结构体赋值*/
    typedef struct _SSData
    {
        int arr[2];
        SSData0 test_data[2];
    } SSData;
    
    void main(void)
    {
        int i, p, q;
        int ID[4] = {11, 22, 13, 14};
        SSData ss[2] =
            {
                {{2020, 2021}, {11, 12, 13, 14}},
                {{2022, 2023}, {21, 22, 23, 24}},
            };
    
        for (i = 0; i < 4; i++)
        {
            p = ss[1].test_data->ID[i]; //调用另一个结构体
            printf("p==============%d\n", p);
        }
    
        for (i = 0; i < 2; i++)
        {
            q = ss[1].arr[i];
            printf("q==============%d\n", q);
        }
     
        printf("\n");
        getch();
        return 0;
    }
    

    执行结果:
    在这里插入图片描述

    4、遍历多层结构体数组的所有数值【重磅推荐】

    源码:

    #include <stdio.h>
    #include <stdint.h>
    #include <string.h>
    
    typedef struct _SSData0
    {
        int ID[4];
    } SSData0;
    
    /*直接给结构体赋值*/
    typedef struct _SSData
    {
        int arr[2];
        SSData0 test_data[2];
    } SSData;
    
    void main(void)
    {
        int i,j, p, q;
        int ID[4] = {11, 22, 13, 14};
        SSData ss[2] =
            {
                {{2020, 2021}, {11, 12, 13, 14}},
                {{2022, 2023}, {21, 22, 23, 24}},
            };
    
        for (i = 0; i < 4; i++)
        {
            for (j = 0; j < 2; j++)
            {
                p = ss[j].test_data->ID[i]; //调用另一个结构体
                printf("p==============%d\n", p);
            }
            
        }
    
        for (i = 0; i < 2; i++)
        {
            for (j = 0; j < 2; j++)
            {
                q = ss[j].arr[i];
                printf("q==============%d\n", q);
            }
        }
    
        printf("\n");
        getch();
        return 0;
    }
    

    执行结果:
    在这里插入图片描述

    展开全文
  • 结构体数组赋值的问题

    万次阅读 2018-06-29 16:03:34
    C语言只有在定义字符数组的时候才能用“=”来初始化变量,其它情况下是不能直接用“=”来为字符数组赋值的,要为字符数组赋值可以用string.h头文件中的strcpy函数来完成。 例如: char a[10] = "123"; /*正确,在...
    C语言只有在定义字符数组的时候才能用“=”来初始化变量,其它情况下是不能直接用“=”来为字符数组赋值的,要为字符数组赋值可以用string.h头文件中的strcpy函数来完成。
    例如:
    char a[10] = "123"; /*正确,在定义的时候初始化*/
    char a[10];
    a = "123"; /*错误,不能用“=”直接为字符数组赋值*/
    strcpy(a, "123"); /*正确,使用strcpy函数复制字符串*/
    所以要对game[0][0].cpart赋值应该用strcpy(game[0][0].cpart, "123");才对。
    注意要使用strcpy函数要用#include <string.h>包含string.h头文件。
    

    给C语言结构体中的char数组赋值有两种方式:

     

    1、在声明结构体变量时赋值:

    //#include "stdafx.h"//If the vc++6.0, with this line.
    
    #include "stdio.h"
    
    struct stu{
        int x;
        char name[10];
    };
    
    int main(void){
        struct stu s={8,"123"};//这样初始化
        printf("%d %s\n",s.x,s.name);
        return 0;
    }

    2、向数组直接拷贝字符串:

     

    //#include "stdafx.h"//If the vc++6.0, with this line.
    
    #include "stdio.h"
    #include "string.h"
    
    struct stu{
        int x;
        char name[10];
    };
    
    int main(void){
        struct stu s;
        strcpy(s.name,"abcd");//向name拷贝字符串
        s.x=128;
        printf("%d %s\n",s.x,s.name);
        return 0;
    }

    至于为什么不能直接给字符数组赋值字符串呢?网上各大神说的是,因为在初始化字符数组时,数组的内存地址已经确定,不能再做修改。

    想要直接给数组赋值字符串除了在初始化时赋值,还可以通过两个函数,void *memcpy(void*dest, const void *src, size_t n);,strcpy(str1,str2)。

    个人的理解是:在初始化字符数组时,编译器会给字符数组首元素赋予初始地址。而后再另外给字符数组赋值字符串,此时字符数组已经具有地址,编译器就会以为是你要给字符数组某个元素赋值。所以说此时是可以给单个字符数组元素赋值单个字符的,但是不可以赋值字符串。

    展开全文
  • 在函数中利用scanf为结构体数组赋值

    千次阅读 2016-11-11 17:54:43
    结构体数组指针作为函数参数,通过数组的首地址与偏移量对结构体数组进行scanf的赋值,在函数中通过指针间接访问到其指向的内存 程序当中,编写函数,输入5个学号(int),5个姓名(字符串),5个成绩数组(每...

    结构体数组指针作为函数参数,通过数组的首地址与偏移量对结构体数组进行scanf的赋值,在函数中通过指针间接访问到其指向的内存


    程序当中,编写函数,输入5个学号(int),5个姓名(字符串),5个成绩数组(每组三个成绩)(int[3]),依次调用函数,最后打印

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


    struct student  //建立结构体,学号,姓名,3门课的分数
    {
    int num;
    char name[10];
    int score[3];
    }Stu[5];          //初始化,一共5个学生的数据




    void getScore(struct student * p)  //函数:向结构体读取分数,一共三门课
    {
    int i, j;
    for (i = 0; i < 5; i++)
    for (j = 0; j < 3; j++)
    scanf_s("%d", (&(p+i)->score[j]));
    }


    void getNum(struct student * p)  //函数:向结构体读取学号
    {
    int i;
    for (i = 0; i < 5;i++)
    scanf_s("%d", &(p + i)->num);
    }


    void getName(struct student * p)  //函数:向结构体读取姓名
    {
    int i;
    for (i = 0; i < 5; i++)
    scanf("%s", &(p + i)->name);
    }
    int main()
    {
    int i, j, average[3] = { 0 };   //average数组储存每门课的平均分
    getNum(Stu);            //函数调用
    getName(Stu);
    getScore(Stu);


    for (j = 0; j < 3; j++)
    {
    for (i = 0; i < 5; i++)
    average[j] += Stu[i].score[j];

    }


    for (i = 0; i < 5; i++)
    {
    printf("num = %d name = %s Score:", Stu[i].num, Stu[i].name);  //依次打印学号 姓名
    //printf("%d %d %d", Stu[0].score[0],Stu[0].score[1],Stu[0].score[2]);


    for (j = 0; j < 3; j++)    //打印三门课的分数
    printf(" %d", Stu[i].score[j]);
    printf("\n");
    }


    printf("average:");


    for (i = 0; i < 3; i++)
    printf("%f ", (float)average[i]/5);   //打印三门课平均分


    printf("\n");




    system("pause");
    return 0;


    }



    展开全文
  • C语言结构体数组赋值问题

    万次阅读 2008-03-02 14:14:00
    C语言结构体数组赋值问题 悬赏分:50 - 解决时间:2007-5-16 12:19结构体数组赋值问题我在使用结构体数组的时候遇到这个问题,想了好长时间也没弄明白其中的原因,程序如下: main() { struct abc { char name;...
    C语言结构体数组赋值问题
    
    悬赏分:50 - 解决时间:2007-5-16 12:19
    结构体数组赋值问题我在使用结构体数组的时候遇到这个问题,想了好长时间也没弄明白其中的原因,程序如下:

    main()
    {
    struct abc
    {
    char name;
    int a;
    float b;
    };
    struct abc stu[3];
    int i;
    printf("please input:/n");
    for(i=0;i<3;i++)
    scanf("%c %d %f",&stu[i].name,&stu[i].a,&stu[i].b);
    printf("you just input:/n");
    for(i=0;i<3;i++)
    printf("%-5c%-10d%-10.2f",stu[i].name,stu[i].a,stu[i].b);
    }

    这是一个试验程序,在给结构体数组赋值后就原样输出以验证赋值是否正确。但是程序执行时没有显示结果即退出。报告的错误信息是:scanf:floating point formats not linked 。把结构体数组改成只有一个结构体变量,程序如下:

    main()
    {
    struct abc
    {
    char name;
    int a;
    float b;
    };
    struct abc stu;
    printf("please input:/n");
    scanf("%c %d %f",&stu.name,&stu.a,&stu.b);
    printf("%5c%10d%10.2f",stu.name,stu.a,stu.b);
    }

    编译执行,可以得到预期结果。我想验证是不是循环的问题,又将程序改成下面这样:不要求输入数据,而在程序内部给结构体变量数组赋初值,然后再用循环输出,程序如下:

    main()
    {
    struct abc
    {char name;
    int a;
    float b;
    };
    struct abc stu[3] = {{'a',12,34},{'b',56,78},{'c',90,12}};
    int i;
    for(i=0;i<3;i++)
    printf("/n%-5c%-10d%-10.2f",stu[i].name,stu[i].a,stu[i].b);
    }

    编译执行,能够得到正确结果。
    在改成下面这样:
    main()
    {
    struct abc
    {
    char name;
    int a;
    float b;
    };
    struct abc stu[3];
    int i;
    printf("please input:/n");
    scanf("%c %d %f",&stu[0].name,&stu[0].a,&stu[0].b);
    printf("you just input:/n");
    printf("%-5c%-10d%-10.2f",stu[0].name,stu[0].a,stu[0].b);
    }
    可以顺利正确执行;
    还有就是如果结构体成员没有float类型的话是不存在上述问题的;

    最后确定是在对有float类型成员的结构体数组用循环方式赋值是出的问题。但是问什么会有这样的问题呢?请高手帮忙解决一下。谢谢!!
    提问者: 休休休休 - 助理 二级
    最佳答案
    其实你的程序是正确的。只不过,TC有关于float(浮点数)的BUG而已。
    scanf:floating point formats not linked
    解决这个问题有一个方法,先#include <math.h>
    然后在main的第一句,调用
    sqrt(0); //求0的平方根,但舍弃结果
    //这句的作用,只是为了让TC打开浮点数支持
     
    展开全文
  • 使用结构体数组赋值

    2019-10-08 11:47:55
    数组赋值 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对...
  • 现在要用结构体数组存储, typedef struct tagMember { char *name; char *group; }; struct tagMember url[20]; 然后我读取生成的txt文件后出现内存报错,也不懂赋值,求大神解惑。 代码如下,我是...
  • 指针赋值过程 ``` HuffmanTree* p; int m = 2 * a - 1;//全部节点的个数 p = (HuffmanTree*)malloc((m + 1) * sizeof(HTNode)); if (!p)return 0; p[0]->parent = 0; ``` 点开p的详细的值得情况后,...
  • c++ 结构体数组赋值

    千次阅读 2017-12-25 03:15:52
    struct MyStruct { int a; char pszStr[20]; }; MyStruct aa[] = { 10,"aa",20,"bb" };可以直接赋值
  • C++结构体数组赋值问题

    千次阅读 2010-04-13 11:38:00
    说明:以下是在网上找到的对结构体数组赋值问题的总结,感觉可以就复制过来了结构体中字符串数组的赋值问题2007年10月15日 星期一 15:33在使用结构体时,每当遇到字符串数组时总是容易出项问题:好好的总结了下!...
  • 如何给下列代码中的结构体数组 info[n],正确赋值啊? 代码目的:创建存储学生信息的结构体数组,用for循环输入学生信息 谢谢大噶~ #include <stdio.h> typedef struct student{ char name; ...
  • C结构体数组赋值

    2015-09-15 21:58:00
    1 #include <stdio.h> 2 #include <stdlib.h> 3 struct MyStruct 4 { 5 int a; 6 char b; 7 8 }; 9 struct MyStruct hello[]= 10 {1,'a',2,'b' 11 12 };...15...
  • #include<time.h> #include<stdlib.h> #include<stdio.h>... sprintf(current, "%04d-%02d-%02d-%02d:%02d:%02d", ...赋值时打印显示正常,但是赋值晚打印就出问题了,如上图,请问是怎么回事呢?
  • #include #include struct stu{ char name[20]; int num; int age; char group;... }stus[5] = {{"Zhou ping", 5, 18, 'C', 145.0}, {"Zhang ping", 4, 19, 'A', 130.5}, ... printf("%s,%d,%d,%c,%7.2f\n",p[j...
  • C++ 结构体指针与结构体数组赋值

    千次阅读 2019-07-18 22:15:39
    对于结构体指针,可以用来指向结构体数组的首地址,但是不能按照结构体数组赋值方式进行赋值,感觉是无法预知后面批量赋值的大小。具体情况见以下代码: #include <iostream> using namespace std; ...
  • 关于给结构体成员中的结构体数组赋值的问题c语言源码:Line26-27汇编指令:实质上是执行了从源内存拷贝值到寄存器再从寄存器到目的内存地址?疑问:为什么stu_t[0]的地址是0x3c,stu_t[1]的地址是0x34(小端)如果...
  • 今天小编就为大家分享一篇关于C语言结构体数组同时赋值的另类用法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • 关于给结构体成员中的结构体数组赋值的问题c语言源码:Line26-27汇编指令:实质上是执行了从源内存拷贝值到寄存器再从寄存器到目的内存地址?疑问:为什么stu_t[0]的地址是0x3c,stu_t[1]的地址是0x34(小端)如果...
  • 标签:C语言中结构体数组概念及定义一个结构体变量可以存放一个学生的一组信息,可是如果有 10 个学生呢?难道要定义 10 个结构体变量吗?难道上面的程序要复制和粘贴 10 次吗?很明显不可能,这时就要使用数组。...
  • 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C2679 二进制“=”: 没有找到接受“initializer list”类型的右操作数的运算符(或没有可接受的转换 //我是在头文件里定义的结构 student ...
  • C语言中结构体数组概念及定义一个结构体变量可以存放一个学生的一组信息,可是如果有 10 个学生呢?难道要定义 10 个结构体变量吗?难道上面的程序要复制和粘贴 10 次吗?很明显不可能,这时就要使用数组。结构体中...
  • C语言对结构体数组进行赋值打印 1. 定义一个学生结构体数组有4个学生,通过键盘给他的成员赋值,然后遍历打印 这里的数据类型是 struct student定义一个结构体数组和定义一个普通数据类型,使用方法也类似,只要明白...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,332
精华内容 532
关键字:

结构体数组赋值