我的计划的目标是将数据从文件加载到销售数组中,然后在移动到下一个城市之前显示每天的每个城市销售额。我在将二维SalesArray传递给其他函数时遇到问题。我很确定这是因为我在全球和主要方面宣布它的方式。我也在组织它时遇到问题,因此它会相应地显示每个城市和日期。
任何帮助都会很棒。谢谢
#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>
#include <time.h>
using namespace std;
double SalesArray;
void GetSales();
void DisplaySales(double SalesArray[5][4]);
int main(){
DisplayHeading();
GetSales();
DisplaySales(double(SalesArray)[5][4]) ;
cout << endl;
system("pause");
return 0;
}
void GetSales(){
double SalesArray[5][4];
ifstream indata;
indata.open("sales.txt");
for (int row = 0; row < 5; row++){
for (int col = 0; col < 4; col++){
indata >> SalesArray[row][col] ;
}
}
//Close the File
//indata.close();
//cout << endl;
}
void DisplaySales(double SalesArray[5][4]){
for (int row = 0; row < 5; row++){
for (int col = 0; col < 4; col++){
cout << fixed << setprecision(2) << SalesArray[row][col] << endl;
}
}
// Array for City
const int SIZE = 5;
string city[SIZE] = {"New York" , "LA" ,
"Chicago" , "Springfield" ,
"Prophetstown" };
for (int count = 0; count < SIZE; count ++){
cout << city[count] << endl;
}
// Array for Days
const int SALES = 4;
string days[SALES] = {"Friday" , "Saturday" ,
"Sunday" , "Monday"
};
for (int count = 0; count < SALES; count ++){
cout << days[count] << endl;
}
}
答案 0 :(得分:1)
是的,请更好地删除SalesArray
中GetSales();
的本地声明,将其作为参数并将其传递给DisplaySales()
。
此外,您应该传递所有SalesArray
,而不是[5][4]
处的元素。
DisplaySales( SalesArray );
注意...... [5][4]
处的元素超出了数组的末尾。在C
中,您声明了尺寸N
,但仅指定为N-1
。
答案 1 :(得分:0)
为什么你有变量SalesArray
的多个声明?因此,您在全局中有double SalesArray
,然后在GetSales()
内有另一个double SalesArray[5][4]
。同样在此函数中,您将文件中的值存储到此局部变量,因此在函数完成后该值将丢失。
要么使用全局变量double SalesArray[5][4]
,要么删除全局变量并将SalesArray[5][4]
传递给GetSales
函数,以便稍后检索。
答案 2 :(得分:0)
你在GetSales()
内声明的SalesArray与main中的那个不一致,一旦你离开那个功能它就消失了。最简单的解决方法是将函数原型更改为GetSales(double SalesData[5][4])
并删除函数范围的SalesArray。
您是否希望以网格格式显示数据?如果是这样,你需要像
这样的东西//Display days along top axis
cout << "\t";
for (int count = 0; count < SALES; count ++){
cout << days[count] << "\t";
}
cout << endl;
for (int row = 0; row < 5; row++){
//display city for that row
cout << city[row] << "\t";
// display each
for (int col = 0; col < 4; col++){
cout << fixed << setprecision(2) << SalesArray[row][col] << "\t";
}
cout << endl;
}
您可能需要使用宽度才能完全正确显示,但我认为这大致是您需要的。
答案 3 :(得分:0)
您声明的全局是单个双精度数,而不是数组。要声明一个数组,它应该类似于double SalesArray[5][4];
在main()中,你调用DisplaySales()是错误的。尝试这样的事情DisplaySales(SalesArray);
我同意其他答案,但是你不应该将它声明为全局和本地,或者将全局作为参数传递给另一个函数。选择一个策略。