0

コードは次のとおりです。

void option5 (StudentRecord student[], int n)

{
   double gpaThreshold;
   char enteredMajor;
   int i;

   cout << "Enter a GPA threshold: ";
   cin >> gpaThreshold;
   cin.ignore(80, '\n');

   cout << "Enter a Major: ";
   cin >> enteredMajor;
   cin.ignore(80, '\n');

   enteredMajor = toupper(enteredMajor);

   for (i = 0; i < n; i++)
   {
      if (student[i].gpa >= gpaThreshold && student[i].major == enteredMajor)
      {
         if (i % 10 == 0)
         {
            cin.ignore();
         }
         cout << setw(3) << right << i+1 << ". "  
         << setw(20) << left << student[i].lastName 
         << setw(20) << left << student[i].firstName 
         << setw(8) << left << student[i].major 
         << fixed << setprecision(2) << setw(8) << left << student[i].earnedHours 
         << fixed << setprecision(2) << setw(6) << left << student[i].gpa << endl;
      }
   }
}

StudentRecord は構造体であり、その行の唯一の整数は 'i' ですが、ポインター (私が想定する必要があります) は .major です。

入力された専攻を、配列内の「専攻」の値と比較したいと考えています。EG I は Chem と入力します - CHEM に変わります - その専攻 (および GPA のしきい値) の下にあるすべての学生を取得します - 上記のステートメントを表示します (「X」専攻のすべての学生)

助言がありますか?ヘルプ?コメント? 正/負のフィードバック?

編集:構造体は次のとおりです。

struct StudentRecord
{
   char     lastName [16];  // field definitions of the structure
   char     firstName[16];
   char     hometown [16];
   char     major[5];
   int      studentNumber;
   double   balance;
   int      earnedHours;
   double   gpa;
};
4

2 に答える 2

2

次のフラグメントを検討してください。

student[i].major == enteredMajor

student[i].majorは aであり、このコンテキストでは achar[5]に発展します。char*これはポインタ型です。

enteredMajorですchar。一体型です。

これらのタイプを比較することはできません。

おそらく、次のように宣言するつもりでしenteredMajorた:

char enteredMajor[5];

次のように比較します。

strcmp(student[i].major, enteredMajor) == 0
于 2012-12-06T01:13:37.430 に答える
1

student[i].majorchar配列です。式で使用すると、 へのポインタに崩壊しますcharenteredMajorコードは、 type を持つと等しいかどうかを比較しcharます。したがって、苦情: ポインターと整数を比較できません (charに昇格されるためint)。

于 2012-12-06T01:13:34.943 に答える