代码存在问题,我找不到它。 我被要求写一个钱结构并使用函数来操纵它。 但代码不适用于任何功能。我试着兜售 对于任何缺失的信息,结构的数组很好地出来了 请发表评论,我很快就会回复。
Money.txt
2
12 20
13 40
#include <iostream>
#include <fstream>
using namespace std;
struct Money { //declaring structure
int dollars;
int cents;
};
Money addMoney(Money *p[], int n) { //adds money data
Money cash{ 0,0 };
int i;
for (int j = 0; j < n; j++) {
cash.dollars = cash.dollars + p[j]->dollars;
cash.cents = cash.cents + p[j]->cents;
}
if (cash.cents >= 100) //100cents = 1 dollar
{
i = (cash.cents) / 100;
cash.dollars = cash.dollars + i;
i = (cash.cents) % 100;
cash.cents = i;
}
return cash;
}
void printMoney(Money *p[], int n) { //printing money data
for (int i = 0; i < n; i++) {
cout << "Dollars: " << p[i]->dollars << endl;
cout << "Cents: " << p[i]->cents << endl;
}
}
Money maxMoney(Money *p[], int n) {
Money cash;
cash.dollars = p[0]->dollars;
cash.cents = p[0]->cents;
for (int i = 0; i < n; i++)
{
if ((p[i]->dollars)>=(cash.dollars))
if ((p[i]->cents)>(cash.cents))
{
cash.dollars = p[i]->dollars;
cash.cents = p[i]->cents;
}
}
return cash;
}
void main() {
Money cash;
ifstream mycin("money.txt");
if (mycin.fail())
cout << "Enable to open file";
int x;
mycin >> x;
Money *arr = new Money[x];
for (int i = 0; i < x; i++)
{
mycin >> arr[i].dollars;
mycin >> arr[i].cents;
}
cout << "The values in money.txt are: ";
printMoney(&arr, x);
cash = addMoney(&arr, x);
cout << "These values added are :";
cout << cash.dollars << " Dollars and " << cash.cents << " cents" << endl;
cash = maxMoney(&arr, x);
cout << "Maximum value is :";
cout << cash.dollars << " Dollars and " << cash.cents << " cents" << endl;
}
&#13;
答案 0 :(得分:0)
这些函数似乎接受了指向 Money的指针数组,但是您正试图将它们与Money数组一起使用。
我建议您使用指向更简单类型的指针数组(例如int
),直到您对该概念感到满意为止,然后再使用Money进行尝试。
答案 1 :(得分:0)
这听起来很像家庭作业,所以我没有发布完整的解决方案,但我会解释看似误解的内容,并给你一些指示。
首先,将数据结构声明为Money结构数组,例如包含Money结构的连续一系列内存块,第一个在主程序中由“arr”指向。
但是,在程序的其余部分(函数)中,您似乎期望使用的数据结构是Money 指针的数组。看到不同?它们不一样,这不会起作用。你必须保持一致。
要么你正在处理一系列结构,在这种情况下,你有效地将一个简单的Money *传递给你的各个函数(并且你取消引用。不是 - &gt;)
或者你正在处理一个指针数组,在这种情况下,你有效地传递指向(Money指针)的指针,你用 - &gt;取消引用;就像你做的那样。但是当你在主程序中读取它们时,你还必须单独分配每个Money结构。也就是说,为指针数组分配内存不会自动为指针数组中的每个Money指针引用分配内存,因此您需要为正在读取的每个条目执行此操作。
因此,正如您现在应该意识到的那样,有多种方法可以修复您的程序。
根据你后来的评论,鉴于函数签名需要保持原样,我建议你使用一系列Money指针。
Money** arr = new Money*[x]
然后你需要在阅读过程中为你的循环添加一行,以实际使每个Money *指向一个Money结构:
for (int i = 0; i < x; i++)
{
arr[i] = new Money
...
最后,因为“arr”现在是指向Money的指针,你可以直接将它传递给你的函数,所以调用它们就是例如:
printMoney(arr, x);