gpt4 book ai didi

c++ - 如何创建一个函数来读取/写入结构成员的数据?

转载 作者:行者123 更新时间:2023-11-30 03:16:34 25 4
gpt4 key购买 nike

我正在尝试创建一个使用 C++ 读取和打印学生数据的程序。为此,我创建了一个 Student 结构,一个从用户那里读取数据并将其分配给结构实例 s1 的函数,以及一个在屏幕上打印学生数据的函数,我认为问题在于读取的函数/写入数据。

这是我的代码:

#include<iostream>
#include<string>
using namespace std;

struct Student
{
char name[30];
int age;
double gpa;
string department;
};

Student read_data(Student x)
{
cout << "Name (30 characters maximum): ";
cin.get(x.name, 30);
cout << "Age: ";
cin >> x.age;
cout << "Department: ";
cin >> x.department;
cout << "GPA: ";
cin >> x.gpa;

return x;
}

void print_data(Student x)
{
cout <<
"\n***************************************************************" << endl;
cout << "Name: " << x.name << endl;
cout << "Age: " << x.age << endl;
cout << "Department: " << x.department << endl;
cout << "GPA: " << x.gpa << endl;
}

int main()
{
Student s1, s2, s3;

cout << "This program stores -Temporarily- data of three students\n" << endl;

cout << "Enter 1st student's data" << endl;

read_data(s1);

print_data(read_data(s1));

system("pause");
return 0;
}

这段代码的输出是:

This program stores data of three students

Enter 1st student's data
Name (30 characters maximum): Ahmed Maysara
Age: 22
Department: CS
GPA: 3.5
Name (30 characters maximum): Age: Department: GPA:
***************************************************************
Name:
Age: -858993460
Department:
GPA: -9.25596e+61
Press any key to continue . . .

如您所见,输出超出了我的预期:) ..

有什么帮助吗?!

最佳答案

CinCout 和 David 都是正确的。您的代码现在存在一些问题。第一个问题是,当您成功调用函数 read_data(s1) 时,s1 只是一个拷贝。因此,当函数使用 cin 为学生设置所有值时,它实际上只是设置拷贝的值。您可以这样做,以便您传递原件,或者您可以返回学生(您正在做的)并将 s1 设置为等于结果(您不是)。

为确保您传入的是原始数据,您可以转到声明 read_data 的位置。不要说 Student read_data(Student x),您应该在不想复制的参数后放置一个 & 符号 Student read_data(Student &x)。这叫做引用传递(你引用原件而不是复制引用)

或者,您可以将 s1 设置为您在 main 中调用它的结果。你可以说 s1 = read_data(s1); 这样可以正常工作,但效率会低一些。

最后,代码中的另一个明显错误是您在执行 print_data(read_data(s1)) 时不小心再次调用了 read_data。相反,说 print_data(s1)

关于c++ - 如何创建一个函数来读取/写入结构成员的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56230743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com