C++遍历结构体数组并赋值

main.cpp

#include <iostream>

using namespace std;

#include "student.h"

int main() {
    Student zhangsan = {"张三", 1001, man, 25};
    Student lisi = {"李四", 1002, wuman, 26};
    cout << zhangsan.name << "," << zhangsan.age << "," << zhangsan.num << "," << zhangsan.sex
         << endl;
    cout << lisi.name << "," << lisi.age << "," << lisi.num << "," << lisi.sex << endl;
    interMsg();
    getMsg();
    return 0;
}

student.cpp

//
// Created by Administrator on 2018/8/29.
//

#include <algorithm>
#include <iostream>
#include "student.h"
#include "utils.cpp"

using namespace std;
#define random(x) (rand()%x)

Student students[100];

void interMsg() {
    size_t size = getArrayLen(students);
    cout << "size:" << size << endl;
//这种循环不能修改stu的num值
//    for (int i = 0; i <size ; ++i) {
//        Student item =students[i];
//        string &basic_string = item.getName();
//        const char *name = basic_string.c_str();
//        //cout << "item.name:" << name << endl;
//        size_t num = random(size);
//        cout << "item.num:" << num << endl;
//        item.num = num;
//    }
//使用指针接收 &students[i]即可
//    for (int i = 0; i <size ; ++i) {
//        Student *item = &students[i];
//        size_t num = random(size);
//        //下面这两种方式一样的
//        item->num = num;
//        (*item).num = num;
//    }
//这种最简单
//这个item 加上&就是去地址 即指针变量 *item即这个变量本身。
        for (auto &item : students) {
        size_t num = random(size);
        item.sex = man;
        cout << "item.num:" << num << endl;
        item.num = num;
    }
}

void getMsg() {
    for (auto item : students) {
        string &basic_string = item.getName();
        const char *name = basic_string.c_str();
        cout << item.name << "," << item.age << "," << item.num << "," << item.sex << endl;
    }
}

student.h

//
// Created by Administrator on 2018/8/29.
//

#ifndef CADDMORE_STUDENT_H
#define CADDMORE_STUDENT_H
using namespace std;

void interMsg();

void getMsg();

enum Sex {
    man = 1,
    wuman = 0
};

struct Student {
    string name;
    int num;
    Sex sex;
    int age;

    string &getName() {
        return name;
    }

    Sex getSex() const {
        return sex;
    }
};


#endif //CADDMORE_STUDENT_H

utils.cpp

//
// Created by Administrator on 2018/8/29.
//
#include <iostream>

using namespace std;

template<class T>
int getArrayLen(T &array)  /*使用模板定义一个函数getArrayLen,该函数将返回数组array的长度*/ {
    return (sizeof(array) / sizeof(array[0]));
}

总结:
1.for (auto &item : students) 中 &item为取指针,方便修改stu的参数。
2.utils.cpp为工具类,getArrayLen为C++通用的获取数组长度方法。
3.#define random(x) (rand()%x) 位宏定义 获取0~x范围内的随机数。
4.Sex枚举类型感觉比java简单。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要给结构数组赋值,可以按照如下的步骤进行: 1. 定义结构类型:首先需要定义一个结构类型,其中包含需要的各个字段。例如,如果我们需要定义一个学生的结构类型,可以包含姓名、年龄和成绩等字段。 2. 声明结构数组:声明一个结构数组,该数组的元素类型就是我们定义的结构类型。可以指定数组的长度,也可以在后面动态分配数组的内存。 3. 逐个赋值:使用循环语句逐个赋值,可以通过数组下标来访问每个结构元素的字段,并为其赋予相应的值。例如,可以使用for循环遍数组,通过输入或从其他数据源中获取相应的值,将其赋给每个结构元素的字段。 4. 输出结果:在赋值完成后,可以再次使用循环语句遍结构数组,并将每个结构元素的字段值输出,以验证赋值是否成功。 示例代码如下: ``` #include <stdio.h> // 定义结构类型 typedef struct { char name[20]; int age; float score; } Student; int main() { // 声明结构数组 Student students[3]; // 逐个赋值 for (int i = 0; i < 3; i++) { printf("请输入第%d个学生的姓名、年龄和成绩:\n", i + 1); scanf("%s%d%f", students[i].name, &students[i].age, &students[i].score); } // 输出结果 printf("学生信息如下:\n"); for (int i = 0; i < 3; i++) { printf("第%d个学生:%s,%d岁,成绩:%.2f\n", i + 1, students[i].name, students[i].age, students[i].score); } return 0; } ``` 以上示例代码中,我们定义了一个名为Student的结构类型,包含了学生的姓名、年龄和成绩三个字段。然后声明了一个长度为3的结构数组students。通过循环语句,逐个为每个结构元素的字段赋值。最后使用循环语句再次遍结构数组,将每个结构元素的字段值输出至控制台,以验证赋值是否成功。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值