将结构传递给函数并在其中输入数据
Pass a Struct to a function and input data in it
我有一个结构数组,我尝试将一个元素传递给输入数据,我希望修改数组,所以我将其作为指针传递,但是当我通过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);
}
您尚未为FirstName
或LastName
分配任何内存
试试这个:
char FirstName[n];
char LastName[n];
但是,如果您使用的是C++,只需使用string
编辑:
由于您使用C++标记了问题,因此这里有一个C++解决方案,其中包含string
和vector
:
#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-> 级)
相关文章:
- 当我在其中一个线程执行中(在activemq-cpp中)捕获到特定值时,我如何终止/停止所有其他线程
- 3-3. 编写一个程序来计算每个不同单词在其输入中出现的次数
- 修改链表主函数代码,用户将在其中输入节点的索引和数据以及正确的消息
- 为什么不能通过在错误输入后设置 std::cin.clear() 来使用 std::cin?
- 如果我们在其中输入一个整数,则字符会给出整数作为输出,但是当分配给它一个整数时,这不会发生。为什么?
- 我写了一个简单的矢量程序,在其中我得到了以下输出。你能帮我理解它的输出吗?
- 仅通过C++中数组初始化的不同方法,即可在同一输入上获得两个不同的答案
- CLion 是否支持自定义输入?如果是,我在哪里输入它们?
- 我已经创建了一个模板函数,但是在检查输入是奇数还是偶数时收到错误 C++.
- 虚幻引擎 3 游戏在 Steam 输入时崩溃
- 编译一个自定义的tf操作,其中输入是5d张量
- 为什么我的数组输出一个不在其中的元素
- 遍历我的数据结构,并向其中输入随机值
- 定义在其中执行不同代码路径的代码节
- 该代码不会在其中显示任何数字输入.如何使它显示任何输入
- 我正在尝试创建一个程序,用户在其中输入一系列数字,并且我想列出范围之间的质数
- 一种程序,用户在其中输入一个整数,程序指示该整数是否为素数
- 从文件中获取输入并在其中存储平均值
- 将结构传递给函数并在其中输入数据
- 我想创建一个函数,我可以在其中输入一个字符串,它会输出一个混乱的字符串版本