2017-04-11 119 views
0

我无法弄清楚如何将sales[]数组传递给BubbleSort()函数。我得到的错误是销售未在此范围内声明,例如它是未声明的变量。这是我遇到的唯一问题。如果我没有调用这个函数,程序工作正常。将C++数组传递到函数

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

void BubbleSort(int arr[], int n) 
{ 
    for (int i = 0; i < n; ++i) 
     for (int j = 0; j < n; ++j) 
      if (arr[j] > arr[j + 1]) 
      { 
       int temp = arr[j]; 
       arr[j] = arr[j + 1]; 
       arr[j + 1] = temp; 
      } 
} 

int main() { 

    //Variables 
    //String to hold user data file 
    string fileName; 
    //Double to hold calculated sales average 
    double averageSales; 
    // Double to hold total sales 
    double totalSales; 
    // Int to read array size 
    int arraySize; 
    // Double to hold highest sales value 
    double highest = 0; 
    // Double to hold lowest sales value 
    double lowest; 
    // Char to hold rerun choice, default value is no 
    char rerun = 'n'; 

    //Do/While loop for rerun choice 
    do { 

     //Get File Name from User 
     cout << "Input Filename to read:" << endl; 
     cin >> fileName; 
     cout << "File Name: " << fileName << endl; 

     // Open files stream 
     ifstream file; 
     file.open(fileName.c_str()); 

     //Check File Steam 
     if (file.is_open()) { 
      // Read arraySize Variable from first line of file 
      file >> arraySize; 

      // Create array from arraySize variable; read from file 
      double sales[arraySize]; 

      // Read data into array 
      for (int i = 0; i<arraySize; i++) { 
       file >> sales[i]; 
      } 

      // Find Total Sales & Average 
      for (int i = 0; i<arraySize; i++) { 
       totalSales += sales[i]; 
      } 
      averageSales = totalSales/arraySize; 

      //Find largest Sales 
      for (int i = 0; i<arraySize; i++) { 
       if (sales[i] > highest) { 
        highest = sales[i]; 
       } 
      } 

      //Find lowest Sales - set default lowest value to the highest value 
      lowest = highest; 
      for (int i = 0; i<arraySize; i++) { 
       if (sales[i] < lowest) { 
        lowest = sales[i]; 
       } 
      } 

      //Close File stream 
      file.close(); 
     } 
     else { 
      cout << "Error Opening File" << endl; 
     } 

     //Sort Array 
     BubbleSort(sales, arraySize); 

     //Output Sales data 
     cout << "Total Sales: " << totalSales << endl; 
     cout << "Average Sales: " << averageSales << endl; 
     cout << "Highest Sales amount: " << highest << endl; 
     cout << "Lowest Sales Amount: " << lowest << endl; 

     //Choice to rerun 
     cout << endl << "Would you like to run again? Y/N " << endl; 
     cin >> rerun; 
    } while (rerun == 'y' || rerun == 'Y'); 
} 
+0

不一致的缩进将阻止用户阅读您的示例。 –

+2

不应该这样:BubbleArray(sales,arraySize);是这个BubbleSort(sales,arraySize); ? – victor

+5

'double sales [arraySize];'不是可移植的C++。数组的大小必须是编译时间常量。一些编译器允许通过扩展,但它不是标准的。考虑'std :: vector sales(arraySize);'而是。 –

回答

4

首先,声明变量salesif - 块里面,而你打电话BubbleSort超出这个if - 阻塞的。因此,该变量超出了范围,不能用于呼叫。

此外,请注意,void BubbleSort(int arr[], int n)需要一个整数数组,而sales是一个双精度数组,即double sales[arraySize]

调用BubbleSort(sales, arraySize)应该会在您纠正范围问题后产生编译器错误。

0

你已经在'if'块中声明了你的数组。它只存在于那里。此外,'销售'是双数组,但你的函数需要一个整数数组。