2012-02-10 10 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のでscoreArray[count]はあなたにdoubleを与えるdouble[]として定義されます。 comparisonArrayから要素を参照できるようにするには整数が必要です。あなたが現在直面している問題を修正しますが、それはまた、精度の多くを失うことになる

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

。グレードが常に整数の場合は、double[]int[]に変更します。それ以外の場合は、scoreArrayの要素を一致させる別の方法を調べる必要があります。私はint型への切り替えが、この場合では動作すると思います

+0

doubleを使用することはできません。: ] – sircrisp

+0

私はそれを変更し、すべてをコンパイルしようとしましたが、compareArray [(int)scoreArray [count]] ++; – sircrisp

+0

にアクセス違反がありました。あなたがそれをコンパイルしたとき、またはあなたがそれを実行したときの違反 – mmodahl

1

scoreArraydoubleの配列であり、あなたがインデックスにあなたがcomparisonArray[scoreArray[count]]を行うときに実行しようとしている配列(

関連する問題