将结构传递给函数并在其中输入数据

Pass a Struct to a function and input data in it

本文关键字:在其中 输入 数据 函数 结构      更新时间:2023-10-16

我有一个结构数组,我尝试将一个元素传递给输入数据,我希望修改数组,所以我将其作为指针传递,但是当我通过scanf输入数据时出现问题,因此程序无法运行

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define n 50
struct Student
{
    char *FirstName;
    char *LastName;
    double Grade;
};
void StudentData( struct Student st );
void EnterStudentData ( struct Student *st );
void AddStudent ( struct Student *st, int *size );
int main()
{
    int size = 0;
    struct Student students[n];
    AddStudent(students, &size);
    StudentData(students[0]);
    return 0;
}
void StudentData( struct Student st )
{
    printf("FirstName: %stPrenume: %stMedia: %.2lf", st.FirstName, st.LastName, st.Grade);
}
void EnterStudentData ( struct Student *st )
{
    printf("FirstName : ");
    scanf_s("%s", &st->FirstName);
    printf("LastName : ");
    scanf_s("%s", &st->LastName);
    printf("Grade : ");
    scanf_s("%lf", &st->Grade);
}
void AddStudent ( struct Student *st, int *size )
{
    EnterStudentData(&st[*size]);
    ++(*size);
}

您尚未为FirstNameLastName分配任何内存

试试这个:

char FirstName[n];
char LastName[n];

但是,如果您使用的是C++,只需使用string

编辑:

由于您使用C++标记了问题,因此这里有一个C++解决方案,其中包含stringvector

#include <string>
#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;
struct Student
{
  string FirstName;
  string LastName;
  double Grade;
};
void StudentData( const Student& _st );
void EnterStudentData ( Student& _st );
void AddStudent ( vector<Student>& st, int& size );
int main()
{
  int size = 0;
  vector<Student> students;
  AddStudent(students, size);
  StudentData(students[0]);
  return 0;
}
void StudentData( const Student& _st )
{
   cout << "FirstName: " << _st.FirstName << "t"
        << "LastName: " << _st.LastName << "t";
   cout.setf(ios::fixed,ios::floatfield);
   cout.precision(2);
   cout << "Grade: "  << _st.Grade << endl;
}
void EnterStudentData (Student& _st )
{
  cout << "FirstName : ";
  cin >> _st.FirstName;
  cout << "LastName : ";
  cin >> _st.LastName;
  cout << "Grade : ";
  cin >> _st.Grade;
}
void AddStudent (vector<Student>& _st, int& _size )
{
  Student next;
  EnterStudentData(next);
  _st.push_back(next);
  ++_size;
}

使用 scanf_s("%s", &st->FirstName) ,获取 st 的地址并在其上使用 -> 运算符。尝试使用 &(st-> 级)

相关文章: