2012-02-10 38 views
1

我正在学习类中的指针和数组。我的问题在于dupScore功能。 我正在尝试查找具有相同分数的学生人数。 scoreArrays元素编号标识学生并保持得分。使用数组作为数组元素时出错

我想创建一个新的数组来使用学生分数作为数组的索引。虽然我在scoreArrays下得到了一个红色的曲折。错误是“表达式必须是整数或枚举”

for(int count = 0; count < maxStudents; count++) 
     comparisonArray[scoreArray[count]]++; 

这是我的整个代码。

#include <iostream> 
using namespace std; 

const int maxStudents = 30; 
void readScores(double[]); 
void gradeCounter(double[],int&,int&,int&,int&,int&); 
int dupScore(double[]); 
void readoutFunc(double[], int, int, int, int, int, int); 

int main() 
{ 
    int As = 0, Bs = 0, Cs = 0, Ds = 0, Fs = 0; // Distribution of scores 
    int sameScore = 0; 

    double scoreArray[maxStudents]; 
    readScores(scoreArray);//Read in Scores 
    gradeCounter(scoreArray, As, Bs, Cs, Ds, Fs);//Count letter grades 
    sameScore = dupScore(scoreArray);//Detect duplicate scores 

    system ("PAUSE"); 
    return 0; 
} 


void readScores(double scoreArray[]) 
{ 
    double *scorePTR; 
    scorePTR = scoreArray; 

    for(int count = 0; count < maxStudents; count++) 
    { 
     cout<<"Please enter score for student "<<count+1<<" or -999 to end.\n"; 
     cin>>*(scorePTR+count); 
     if(*(scorePTR+count) == -999) 
     break; 
    } 
} 



void gradeCounter(double scoreArray[],int &As,int &Bs,int &Cs,int &Ds,int &Fs) 
{ 
    double *scorePTR2; 
    scorePTR2 = scoreArray; 

    for(int count = 0; count < maxStudents; count++) 
    { 
     if(scoreArray[count] >= 90) 
      As+=1; 
     else if(*(scorePTR2+count) >= 80 && *(scorePTR2+count) < 90) 
      Bs+=1;  
     else if(*(scorePTR2+count) >= 70 && *(scorePTR2+count) < 80) 
      Cs+=1; 
     else if(*(scorePTR2+count) >= 60 && *(scorePTR2+count) < 70) 
      Ds+=1; 
     else if(*(scorePTR2+count) >= 0 && *(scorePTR2+count) < 60) 
      Fs+=1; 
    } 
} 

int dupScore(double scoreArray[]) 
{ 
    const int maxGrade = 101; 
    double comparisonArray[maxGrade]; 
    int sameScores = 0; 


    for(int count = 0; count < maxStudents; count++) 
     comparisonArray[scoreArray[count]]++; 

    for(int count2 = 0; count2 < maxGrade; count2++) 
    { 
     if(comparisonArray[count2] > 0) 
      sameScores+=1; 
    } 


     return sameScores; 

} 

void readoutFunc(double scoreArray[], int As, int Bs, int Cs, int Ds, int Fs, int sameScore) 
{ 
     int numofStudents = 0; 
    for(int count = 0; scoreArray[count] >= 0; count++) 
    { 
     numofStudents += 1; 
    } 
    cout<<"\n\nReport"; 
    cout<<"\n---------"; 
    cout<<"\nNumber of students: "<<numofStudents; 
    cout<<"\nNumber of As: "<<As; 
    cout<<"\nNumber of Bs: "<<Bs; 
    cout<<"\nNumber of Cs: "<<Cs; 
    cout<<"\nNumber of Ds: "<<Ds; 
    cout<<"\nNumber of Fs: "<<Fs; 

    cout<<"\n\n"<<sameScore<<" students have the same score." 
} 

回答

2

scoreArray被定义为double[]所以scoreArray[count]会给你一个double。您需要一个整数才能引用compareArray中的元素。

for(int count = 0; count < maxStudents; count++) comparisonArray[(int)scoreArray[count]]++;

这将解决您当前所面临的问题,但它也将失去很多的精度。如果分数总是整数,您可能会考虑将double[]更改为int[]。否则,您可能需要查看匹配scoreArray元素的不同方法。

+0

我想切换到INT会在这种情况下工作: – sircrisp 2012-02-10 02:14:26

+0

虽然当我改变它,并试图编译一切,我在compareArray [(int)scoreArray [count]] ++得到了访问冲突; – sircrisp 2012-02-10 14:42:07

+0

你有一个访问当你编译它?或者当你运行它时出现违规? – mmodahl 2012-02-10 18:37:50

1

scoreArraydouble一个数组,你不能用一个double索引的数组(你想,当你做comparisonArray[scoreArray[count]]