2013-12-10 85 views
1

我的程序的目標是將數據從文件加載到銷售數組中,然後顯示每天的每個城市的銷售額,然後再轉到下一個城市。我有問題將我的二維SalesArray傳遞給我的其他函數。我很確定這是因爲我在全球和主要地區宣佈它的方式。我也有組織它的問題,因此它顯示每個城市和相應的日子。二維數組C++上的錯誤

任何幫助將是偉大的。謝謝

#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; 
    } 
} 
+1

請不要公佈整個文件。嘗試放置能夠顯示您的問題的最小代碼片段。記得縮進它。在你的程序中,你錯誤地聲明瞭數組是因爲你聲明瞭一個值,你錯過了'*'嗎?閱讀指針和數組 – janisz

回答

0

爲什麼你有多個聲明變量SalesArray?所以你在全球有一個double SalesArray,然後在GetSales()裏面有另一個double SalesArray[5][4]。此外,在此函數中,您將文件中的值存儲到此局部變量中,因此該值在函數完成後會丟失。

要麼使用全局變量double SalesArray[5][4],要麼刪除全局變量,並將SalesArray[5][4]傳遞給GetSales函數,以便稍後檢索它。

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; 
} 

您可能需要發揮一下,寬度爲它完全正確顯示的,但我認爲這是大概你所需要的。

1

是的,刪除GetSales();中的SalesArray的本地聲明甚至更好,使其成爲一個參數並將其傳入,就像DisplaySales()一樣。

此外,您應該通過所有SalesArray,而不是在[5][4]的元素。

 DisplaySales(SalesArray); 

注意... [5][4]的元素超出了數組的末尾。在C中,您聲明的大小爲N,但僅索引到N-1

0

你聲明的全局是一個double,而不是一個數組。要聲明一個數組,它應該類似double SalesArray[5][4];在main()中,您調用DisplaySales()時出錯。嘗試類似這樣的DisplaySales(SalesArray);我同意其他答案,但不應將其聲明爲全局和本地,或者將其作爲參數傳遞給另一個函數。只需選擇一種策略。