C++初学者.帮助将结构传递给函数.
Beginner programmer in C++ . Help passing structure to function...?
嗨,这里的初学者程序员:]甚至不知道如何表达这个问题。我正在做家庭作业,我似乎无法改变我创建的这个结构的值(预算2)。
该程序的目标是显示第一个结构budget1,并在用户输入budget2的值后找到它与budget2之间的差异。
根据调试器的说法,当我使用inputData函数输入预算2中的任何值时,我不会更改它们,因此当showDiff函数运行时,它只会从预算1中减去预算2中的每个值,使所有总计显示为0。
#include <iostream>
#include <windows.h>
#include <string>
using namespace std;
struct MonthlyBudget
{
MonthlyBudget();
double housing, utilities, householdExpenses, transportation, food, medical, insurance, entertainment, clothing, misc;
};
int main()
{
HANDLE screen = GetStdHandle(STD_OUTPUT_HANDLE);
COORD position;
void inputData(struct MonthlyBudget data);
void displayData(struct MonthlyBudget);
void showDiff(struct MonthlyBudget, struct MonthlyBudget);
struct MonthlyBudget budget1, budget2;
displayData(budget1);
inputData(budget2);
showDiff(budget1, budget2);
system ("PAUSE");
return 0;
}
MonthlyBudget::MonthlyBudget()
{
housing = 500.00;
utilities = 150.00;
householdExpenses = 65.00;
transportation = 50.00;
food = 250.00;
medical = 30.00;
insurance = 100.00;
entertainment = 150.00;
clothing = 75.00;
misc = 50.00;
}
void displayData(struct MonthlyBudget data)
{
cout << "ntBudgetnnt";
cout << "$" << data.housing << "nnt";
cout << "$" << data.utilities << "nnt";
cout << "$" << data.householdExpenses << "nnt";
cout << "$" << data.transportation << "nnt";
cout << "$" << data.food << "nnt";
cout << "$" << data.medical << "nnt";
cout << "$" << data.insurance << "nnt";
cout << "$" << data.entertainment << "nnt";
cout << "$" << data.clothing << "nnt";
cout << "$" << data.misc << "nnt";
}
void inputData(struct MonthlyBudget data)
{
HANDLE screen = GetStdHandle(STD_OUTPUT_HANDLE);
COORD position;
position.X = 15;
position.Y = 3;
SetConsoleCursorPosition(screen, position);
cin >> data.housing;
position.Y = 5;
SetConsoleCursorPosition(screen, position);
cin >> data.utilities;
position.Y = 7;
SetConsoleCursorPosition(screen, position);
cin >> data.householdExpenses;
position.Y = 9;
SetConsoleCursorPosition(screen, position);
cin >> data.transportation;
position.Y = 11;
SetConsoleCursorPosition(screen, position);
cin >> data.food;
position.Y = 13;
SetConsoleCursorPosition(screen, position);
cin >> data.medical;
position.Y = 15;
SetConsoleCursorPosition(screen, position);
cin >> data.insurance;
position.Y = 17;
SetConsoleCursorPosition(screen, position);
cin >> data.entertainment;
position.Y = 19;
SetConsoleCursorPosition(screen, position);
cin >> data.clothing;
position.Y = 21;
SetConsoleCursorPosition(screen, position);
cin >> data.misc;
position.Y = 23;
SetConsoleCursorPosition(screen, position);
}
void showDiff(struct MonthlyBudget data, struct MonthlyBudget data2)
{
HANDLE screen = GetStdHandle(STD_OUTPUT_HANDLE);
COORD position;
position.X = 20;
position.Y = 3;
SetConsoleCursorPosition(screen, position);
cout << (data.housing - data2.housing);
position.Y = 5;
SetConsoleCursorPosition(screen, position);
cout << (data.utilities - data2.utilities);
position.Y = 7;
SetConsoleCursorPosition(screen, position);
cout << (data.householdExpenses - data2.householdExpenses);
position.Y = 9;
SetConsoleCursorPosition(screen, position);
cout << (data.transportation - data2.transportation);
position.Y = 11;
SetConsoleCursorPosition(screen, position);
cout << (data.food - data2.food);
position.Y = 13;
SetConsoleCursorPosition(screen, position);
cout << (data.medical - data2.medical);
position.Y = 15;
SetConsoleCursorPosition(screen, position);
cout << (data.insurance - data2.insurance);
position.Y = 17;
SetConsoleCursorPosition(screen, position);
cout << (data.entertainment - data2.entertainment);
position.Y = 19;
SetConsoleCursorPosition(screen, position);
cout << (data.clothing - data2.clothing);
position.Y = 21;
SetConsoleCursorPosition(screen, position);
cout << (data.misc - data2.misc);
position.X = 5;
position.Y = 23;
SetConsoleCursorPosition(screen, position);
}
不太确定我做错了什么,如果有任何帮助,我们将不胜感激。非常感谢。
PS。我知道我的代码一定很可笑。
您正在按值传递结构
这意味着无论何时调用某个函数,都会复制结构,然后将其传递给函数。因此,在您的情况下,budget2
被复制并传递给inputData
。但是inputData
完成后,budget2
仍然与副本上的函数相同
你需要通过指针或引用来传递你的结构。在你的情况下,我建议使用引用。因此,您的函数应该如下所示:void inputData(MonthlyBudget& data);
BTW:
你真的应该读一本关于c++的好书,读一读关于按值传递或按引用传递的书。
相关文章:
- 使用不带参数的函数访问结构元素
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 链表,反向函数,数据结构
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 需要帮助将结构数组传递给函数
- 使用cpp中的结构和函数的多个学生条目
- 如何传递带有通过引用传递的结构参数的函数?
- 在类构造函数中使用结构变量
- 在 c++ 中将变量作为结构构造函数中的引用传递
- 在类构造函数中定义结构变量的参数
- 如何在模板类函数中分配结构值?
- 我应该在C++中将这些结构用作参数化构造函数吗?
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 在结构外部调用指向函数的指针
- 函数:结构的数组
- C++错误:只能为对象和函数结构指定存储类
- 将libuv与函数结构一起使用,而不是函数回调
- 从c#调用c++函数-结构体,指针,函数指针
- 函数结构数组输入cin问题