0

私は、名前を読みたい5人の学生がいる成績表プロジェクトに取り組んでおり、内部ループで各学生の4つの成績を取得しています。このループで何かが機能していません。

生徒 1 の名前を入力してください: Dave Daveの
学年番号 1 を
入力してください: 100 Dave の学年番号 2 を
入力してください: 100 Dave の学年番号 3 を入力してください: 100
学年番号を入力してくださいDave の場合 4: 10
生徒 2 の名前を入力して
ください: James 学年番号を入力してください 5 James の場合: 100
生徒 3 の名前を入力して
ください: Sam サムの学年番号 5 を
入力してください: 100 :ジャック
ジャックの成績番号 5 を
入力してください: 100 生徒 5 の名前を入力して
ください: マイク マイクの成績番号 5 を入力してください: 100

次の生徒にジャンプする前に 4 成績を取得する必要があります。過去数時間、これを理解できませんでした。これが私がこれまでに持っているコードです:

#include <iostream>
#include <string>

using namespace std;

const int STUDENTS = 5; //holds how many students we have
const int SCORES = 4;

void getNames(string names[], double student1[SCORES], double student2[SCORES],
          double student3[SCORES], double student4[SCORES], double student5[SCORES],            int SCORES, int STUDENTS);

int main()
{
    string names[STUDENTS]  = {""};
    char grades[STUDENTS]   = {""};
    double student1[SCORES] = {0};
    double student2[SCORES] = {0};
    double student3[SCORES] = {0};
    double student4[SCORES] = {0};
    double student5[SCORES] = {0};

getNames(names, student1, student2, student3, student4, student5, SCORES,  STUDENTS);


//  Make sure we place the end message on a new line
    cout << endl;

//  The following is system dependent.  It will only work on Windows
    system("PAUSE");

    return 0;
}

void getNames(string names[], double student1[SCORES], double student2[SCORES],
          double student3[SCORES], double student4[SCORES], double student5[SCORES],     int SCORES, int STUDENTS)
{
     for (int i = 0; i < STUDENTS; i++)
     {
         cout << "Please enter the name for student " << i+1 << ": ";
         cin >> names[i];
         cout << endl;

         if (i == 0)
         {
            int count1 = 0;
            for (count1; count1 < SCORES; count1++)
            {
                cout << "Please enter the grade number " << count1+1 << " for " << names[i] <<": ";
                cin >> student1[count1];
                cout << endl;
            }
         }
         else if (i == 1)
         {
            int count2 = 0; 
            for (count2; count2 < SCORES; count2++);
            {
                cout << "Please enter the grade number " << count2+1 << " for " << names[i] <<": ";
                cin >> student2[count2];
                cout << endl;
            }
         }
         else if (i == 2)
         {
            int count3 = 0; 
            for (count3; count3 < SCORES; count3++);
            {
                cout << "Please enter the grade number " << count3+1 << " for " << names[i] <<": ";
                cin >> student3[count3];
                cout << endl;
            }
         }
         else if (i == 3)
         {
            int count4 = 0; 
            for (count4; count4 < SCORES; count4++);
            {
                cout << "Please enter the grade number " << count4+1 << " for " << names[i] <<": ";
                cin >> student4[count4];
                cout << endl;
            }
         }
         else
         {
            int count5 = 0; 
            for (count5; count5 < SCORES; count5++);
            {
                cout << "Please enter the grade number " << count5+1 << " for " << names[i] <<": ";
                cin >> student5[count5];
                cout << endl;
            }
         }

     }
}

これについて助けてくれてありがとう!

4

3 に答える 3

3

ここではかなり大雑把な処理が行われていますが、問題は、最初のループを除くすべての内部ループにセミコロンがあることです。

for (count2; count2 < SCORES; count2++);

セミコロンを削除すると、中括弧内のものはループの一部になります。

次のように、関数に入るときにすべての関数引数を独自の配列に入れることで、コードを少し整頓し、エラーを起こしにくくすることをお勧めします。

double *scores[5] = { student1, student2, student3, student4, student5 };

次に、その繰り返しをすべて取り除きます-コピー/貼り付けが問題の原因です:

for (int i = 0; i < STUDENTS; i++)
{
    cout << "Please enter the name for student " << i+1 << ": ";
    cin >> names[i];
    cout << endl;

    for (int s = 0; s < SCORES; s++)
    {
        cout << "Please enter the grade number " << s+1 << " for " << names[i] <<": ";
        cin >> scores[i][s];
        cout << endl;
    }
}
于 2013-04-29T05:29:48.773 に答える
2

次のような 2 つのネストされたループを使用できないのはなぜですか

  for (int studix=0, stduix<STUDENTS; studix++) { 
     //...
     for (int gradix=0; gradix<SCORE; gradix++) {
        //...
     }
     //....
  }

ところで、条件はより複雑なものになる可能性があります。たとえば、内部ループは

     bool goodgrade=true;
     for (int gradix=0; goodgrade && gradix<SCORE; gradix++) {
       // you could modify goodgrade or use break; inside the loop
     }

continuebreakをループ内で使用できることを忘れないでください。

そして、良い C++ プログラミングの本を読む時間をとってください。

于 2013-04-29T05:15:29.327 に答える
1

バジルの答えと私のコメントに基づいて構築:

int main()
{
string names[STUDENTS]  = {""};
char grades[STUDENTS]   = {""};
double student1[SCORES] = {0};
double student2[SCORES] = {0};
double student3[SCORES] = {0};
double student4[SCORES] = {0};
double student5[SCORES] = {0};

double *gradeArray[STUDENTS];
gradeArray[0] = student1;
gradeArray[1] = student2;
gradeArray[2] = student3;
gradeArray[3] = student4;
gradeArray[4] = student5;

for (int studix=0, stduix<STUDENTS; studix++) { 
 // get the name of the student
 for (int gradix=0; gradix<SCORE; gradix++) {
    // put the grades in gradeArray[studix][gradix]...

 }
 //....
}

はい、私は 2 次元配列について知っていますが、「5 つの個別の配列」でこれを行う方法を明確にしようとしています。不器用ですが、これでうまくいくと思います。

于 2013-04-29T05:30:44.407 に答える