struct +函数代码中断

时间:2015-10-25 19:29:28

标签: c++ function

代码存在问题,我找不到它。 我被要求写一个钱结构并使用函数来操纵它。 但代码不适用于任何功能。我试着兜售 对于任何缺失的信息,结构的数组很好地出来了 请发表评论,我很快就会回复。

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;
&#13;
&#13;

2 个答案:

答案 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);