2014-02-18 96 views
0

我差不多完成了我的代码;但是,一部分工作不正常。简单地说,从一个只包含数字的文件(例如出售的汽车)中读取数据。通过使用一个数组,试图获得这些数字的总数,max和最大索引的数量。我的问题是:如何从我的MaxSold函数返回两个值?它仅返回添加到索引的最大值,这是不正确的。结果应该指向员工编号,然后是最大值。 这是我到目前为止的代码:C++返回数组中的两个值

#include <iostream> 
#include <fstream> 
/*#include <vector> 
#include <iomanip>*/ 
void Read(int arryList[], int size); 
void Print(int arryList[], int size); 
int total(int arryList[], int size); 
int MaxSold(int arryList[], int size, int& number); 
using namespace std; 
ifstream inFile("C:\\cars.dat"); 
int main() 
{ 
int cars[7]; 
int i; 
Read(cars,7); 
Print(cars,7); 
cout<<"The total of sold cars is: "<<total(cars, 7)<< "\n"; 
cout<<"The Max "<< MaxSold(cars, 7, i); 
} 
    void Read(int arryList[], int size){ 
    for(int i = 0; i < 7; i++) 
{ 
    inFile >> arryList[i]; 

} 
return; 
} 
void Print(int arryList[], int size){ 
for (int i = 0; i < 7; i++){ 

    cout << i + 1 << "-"<< arryList[i] << "\n"; 

} 
return ; 
} 

int total(int arryList[], int size){ 
int sum = 0; 
    for (int i = 0; i < size; i++){ 


sum +=arryList[i]; 

} 
return sum; 
} 
    int MaxSold(int arryList[], int size, int& number){ 
    int Maximum= 0; 
    int relate=0; 
    for(int i=0 ; i<7 ; i++){ 

    if (arryList[i] > Maximum){ 
    Maximum = arryList[i]; 
    relate = i+1; 
    } 
    } 
    return Maximum, relate; 
} 
+0

为了解释:逗号操作者在C++通过评估'x',忽略不管它的计算结果为,然后评估'y'和在任何环境中使用它计算表达式'X,y''的x,y '出现了。例如:'int x = 3 + f(),4 * 2;'评估'3 + f()' - 所以如果'f()'包含'std :: cout <<“hi!\ n”;返回42;'你会得到“hi \ n”输出,但是它会抛弃3 + 42 = 45的值并继续评估4 * 2,产生8,这就是分配给'x'的值。类似的事情发生在'返回最大值,相关;' - 有效'最大值',被抛弃并被忽略。 –

回答

1

使用std::pair

#include<utility> 
//.. 
std::pair<int,int> MaxSold(int arryList[], int size, int& number) 
{ 
    //... 
    return std::make_pair(Maximum, relate); 
} 

然后,

std::pair<int,int> p = MaxSold(cars, 7, i) ; 

std::cout<< p.first ; //maximum 
std::cout<< p.second ; //relate 
1

你不能从一个函数返回多个值。当然,这个价值可以成为多种价值的容器。它可以是您自己的自定义类型,但最简单的方法是返回std::pair<int,int>

std::pair<int, int> MaxSold(int arryList[], int size, int& number) 
{ 
    // ... 
    return std::make_pair(Maximum, relate); 
}