微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C指向结构体和函数调用的指针显示有关学生结构体的信息

如何解决C指向结构体和函数调用的指针显示有关学生结构体的信息

因此,我在C ++中进行了练习。我有一个具有以下成员的结构学生:1个int,2个char,1个float和(我在练习中写了几行):“在读取数据的函数上有两个指针void( read)(student st)和一个用于显示数据无效的指针( write)(student st)“

我必须从键盘上读取学生人数,然后为带有学生的数组分配内存。

然后我必须定义2个函数:void readData(student * st)和void writeData(student * st),它们读取并显示一个学生结构的成员。我必须检查学生数组并使用void readData(student)初始化指向函数void( read)(student st)和void( write)(student st)的指针* st)和void writeData(student * st)。在这里我有些困惑。

要做的最后一件事是遍历学生数组并调用函数v [i] .read(&v [i])和v [i] .write(&v [i])进行读取和显示数据。

这是我的代码

HEADER

 #pragma once

struct student {
    int nrID;
    char name[100];
    char gender[20];
    float mark;
    void(*read)(student* st);
    void(*write)(student* st);
};

void readStudents(int n);
void readData(student* st);
void writeData(student* st);

功能文件

#include <iostream>
#include "header.h"

using namespace std;

void readStudents(int n) {
    cout << "Number of students: ";
    cin >> n;
    student *v;
    v = new student[n]; // here I allocate the students array
    /*
    for(int i=0; i<n; ++i) {
        v[i].read(??) = readData(&v[i]);
        v[i].write(??) = writeData(&v[i]);
    }
    */ // Here I am confused. I'm not sure if I initialized the pointers to function in a right way.
    
    for (int i = 0; i<n; ++i) {
        v[i].read(&v[i]);
        v[i].write(&v[i]);
    }
}
// below I created 2 functions which read and display the members of one student struct.
void readData(student* st) {
    cout << "Enter the nrId: ";
    cin >> st->nrID;

    cout << "Enter the name: ";
    cin >> st->name;

    cout << "Enter the gender: ";
    cin >> st->gender;

    cout << "Enter the mark: ";
    cin >> st->mark;
}

void writeData(student* st) {
    cout << "Id number: " << st->nrID << endl;
    cout << "Name: " << st->name << endl;
    cout << "Gender: " << st->gender << endl;
    cout << "Mark: " << st->mark << endl;
}

文件

#include <iostream>
#include "header.h"

using namespace std;

int main()
{
    int n;
    readStudents(n);
    return 0;
}

我在代码块中编译代码,我所拥有的只是“学生人数:”程序崩溃。 如何修复那些指针初始化?

解决方法

您的程序具有未定义的行为,因为read的{​​{1}}和write成员未分配给任何有效内容。

我不清楚为什么structreadwrite的非static成员。最好让它们成为struct的成员,为它们分配适当的功能,然后使用它们来读取/写入static的实例。

struct

请确保通过添加来更新.cpp文件。

struct student {
    int nrID;
    char name[100];
    char gender[20];
    float mark;

    // make these static members
    static void(*read)(student* st);
    static void(*write)(student* st);
};

更新void (*student::read)(student* st) = nullptr; void (*student::write)(student* st) = nullptr;

main

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。