2013-12-10 3 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

SalesArray, который вы указали внутри GetSales(), отличается от основного, как только вы покинете эту функцию. Самое простое исправление заключается в том, чтобы изменить прототип функции на 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

Да, удалите локальную декларацию SalesArray в GetSales(); еще лучше, сделайте это аргументом и передайте его точно так же, как DisplaySales().

Кроме того, вы должны передать все SalesArray, а не элемент на [5][4].

 DisplaySales(SalesArray); 

... Примечание элемент в [5][4] находится за концом массива. В C, вы объявляете размер N, но только указатель N-1.

0

Глобальное объявление, которое вы объявляете, представляет собой один двойной, а не массив. Чтобы объявить массив, это должно быть что-то вроде double SalesArray[5][4]; В main() вы вызываете DisplaySales() неправильно. Попробуйте что-то вроде этого DisplaySales(SalesArray); Я согласен с другими ответами, хотя вы не должны объявлять его глобальным и локальным или передавать глобальное значение в качестве параметра другой функции. Просто выберите одну стратегию.

Смежные вопросы