[英]Beginner programmer in C++ . Help passing structure to function…?
嗨,初學者程序員在這里:]甚至不知道如何表達這個問題。 我正在做家庭作業,似乎無法更改我創建的該結構的值(budget2)。
該程序的目標是顯示第一個結構budget1,並在用戶輸入budget2的值后找到它與budget2之間的差異。
根據調試器的說明,當我使用inputData函數輸入它們時,我並沒有更改budget2中的任何值,因此,當showDiff函數運行時,它僅從budget1中減去budget2中的每個值,使所有總計顯示為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 << "\n\tBudget\n\n\t";
cout << "$" << data.housing << "\n\n\t";
cout << "$" << data.utilities << "\n\n\t";
cout << "$" << data.householdExpenses << "\n\n\t";
cout << "$" << data.transportation << "\n\n\t";
cout << "$" << data.food << "\n\n\t";
cout << "$" << data.medical << "\n\n\t";
cout << "$" << data.insurance << "\n\n\t";
cout << "$" << data.entertainment << "\n\n\t";
cout << "$" << data.clothing << "\n\n\t";
cout << "$" << data.misc << "\n\n\t";
}
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 ++的好書,並閱讀有關按值傳遞或按引用傳遞的知識。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.