0

この学校向けプログラムに問題があります。2 次元配列を使用しようとしていますが、「int から int * への変換がなく、'>=' : 'int [5]' は 'int' と間接のレベルが異なります」というエラーが表示されます。1 次元配列の場合は記述できますが、2 次元配列の構文に問題があります。私が見逃している可能性があるものに関して、誰かが私を正しい方向に向けることができますか? btnShow_CLick の後にコメントアウトしましたが、正しく動作します。明らかに何かが欠けているのは btnGroup_Click だけです。

知識を共有できる可能性のある人に感謝します。

    static const int NUMROWS = 4;
    static const int NUMCOLS = 5;
    int row, col;
    Graphics^ g;
    Brush^ redBrush;
    Brush^ yellowBrush;
    Brush^ greenBrush;
    Pen^ blackPen;


private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
             g = panel1->CreateGraphics();
             redBrush = gcnew SolidBrush(Color::Red);
             yellowBrush = gcnew SolidBrush(Color::Yellow);
             greenBrush = gcnew SolidBrush(Color::Green);
             blackPen = gcnew Pen(Color::Black);
         }

    private: System::Void btnShow_Click(System::Object^  sender, System::EventArgs^  e) {

         panel1->Refresh();

         for (int row = 0; row < NUMROWS; row++)
         {
             for (int col = 0; col < NUMCOLS; col++)
             {
                 Rectangle seat = Rectangle(75 + col * 75,40 + row *40,25,25);
                 g->DrawRectangle(blackPen, seat);
             }
         }
     }

private: System::Void btnGroup_Click(System::Object^  sender, System::EventArgs^  e) {
             int score[NUMROWS][NUMCOLS] = {{45,65,11,98,66},
                                        {56,77,78,56,56},
                                        {87,71,78,90,78},
                                        {76,75,72,79,83}};

         int mean;
         int student;
         mean = CalcMean(score[]);
         txtMean->Text = mean.ToString();

         for (int row = 0; row < NUMROWS; row++)
         {
             for (int col = 0; col < NUMCOLS; col++)
             {
                 student = (row*NUMCOLS) + (col);
                 Rectangle seat = Rectangle(75 + col * 75,40 + (row * 40),25,25);
                 if (score[student] >= 80
                     g->FillRectangle(greenBrush, seat);
                 else if (score[student] >= mean)
                     g->FillRectangle(yellowBrush, seat);
                 else 
                     g->FillRectangle(yellowBrush, seat);
                 g->DrawRectangle(blackPen, seat);
             }
         }
     }

     private: double CalcMean(int score[])
     {
         int sum = 0;
         int students = NUMROWS * NUMCOLS;
         for (int i=0; i< students; i++) sum += score[i];
         return sum / students;
     }
4

1 に答える 1

1

Score[student]である と同等*(score+student)です*int。代わりに、おそらくscore[row][col]、またはそれに相当するものを使用する必要があります**(score+student)(配列表記を強くお勧めします)。と同等ですが*Score[student]、それはかなり醜いです。

さらに、「同等です」と言うとき、それは単にsizeof int ==sizeof (*int). 配列内の別の型でポインター ロジックを使用すると、おかしな結果になる可能性があります。

于 2012-08-05T01:20:07.230 に答える