二维数组C ++出错

时间:2013-12-10 00:33:59

标签: c++ arrays multidimensional-array

我的计划的目标是将数据从文件加载到销售数组中,然后在移动到下一个城市之前显示每天的每个城市销售额。我在将二维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;
    }
}

4 个答案:

答案 0 :(得分:1)

是的,请更好地删除SalesArrayGetSales();的本地声明,将其作为参数并将其传递给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);我同意其他答案,但是你不应该将它声明为全局和本地,或者将全局作为参数传递给另一个函数。选择一个策略。