Struct +函数代码中断
struct + functions code breaks
代码有问题,我找不到它。我被要求编写一个money结构体,并使用函数对其进行操作。但是代码对任何函数都不起作用。我试着数数构造器数组,它很好地显示了任何遗漏的信息请留言,我会尽快回复。
Money.txt
2 12 2013 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;
}
这些函数似乎接受指向 Money的指针数组,但您试图将它们与Money数组一起使用。
我建议您先使用指向更简单类型(如int
)的指针数组,直到您对这个概念感到满意,然后再尝试使用Money。
这听起来很像家庭作业,所以我不会发布一个完整的解决方案,但我会解释什么是误解,并给你一些提示。
首先,你声明你的数据结构为Money结构的数组,例如,包含Money结构的连续内存块系列,其中第一个在主程序中由"arr"指向。
但是,在程序(函数)的其余部分,您似乎期望使用的数据结构是Money 指针数组。看到区别了吗?它们不一样,这样行不通。你必须保持一致。
或者你正在处理一个结构数组,在这种情况下,你有效地传递一个单一的,简单的Money*到你的函数到处(和你解引用)。不->)
或者你正在处理一个指针数组,在这种情况下,你有效地传递了一个指针到一个(Money指针),并像你所做的那样使用->解引用。但是当你在主程序中读入Money结构体时,你还必须单独分配每个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);
- 我的代码运行良好,但在游戏循环中中断
- 使用个人C++库编译代码时,与头文件一起使用时会中断
- 中断长代码 snprintf 格式和参数
- 为什么我的代码在第一个 if 语句处中断?
- 如何在不中断剩余代码的情况下仅C++中输入整数
- 移动返回对象的构造函数会中断C++98 代码?
- 为什么使用复制构造函数会导致此代码中断?
- VS2015 中的方法存在检查器代码中断
- 递归期间代码执行中断
- 添加<iostream>会中断 G++-7 中的代码
- 为什么Visual Studio Release生成在未执行的代码行中断
- 中断代码执行
- 如何中断本机扩展代码而不杀死解释器
- 在WNDClasSex中断代码中将代码添加到WNDPROC回调中
- C++代码中断行,为了我的爱,我无法修复它
- 为什么代码在代码块中的断点处没有中断
- 尝试分配值时C++继承中断的代码
- 编译器优化会中断代码
- GCC优化标志中断代码
- 我可以在不中断代码的情况下删除此警告吗?