1. ホーム
  2. c++

[解決済み] ISO C++ではポインタと整数の比較は禁止されている?

2022-02-25 12:14:54

質問

以下はそのコードです。

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 です。

入力された専攻と配列の中の"Major"の値を比較したいのですが、どうすればよいですか? 例:Chemと入力する。 -CHEMと表示されます。 -その専攻(とGPAの閾値)の下にあるすべての学生を検索します。 -上記のステートメントを表示します (すべての 'X' メジャーの学生)

何か提案はありますか?ヘルプは?コメントは?肯定的/否定的なフィードバックは?

EDIT: 構造体はこちらです。

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;
};

解決方法は?

この断片を考えてみましょう。

student[i].major == enteredMajor

student[i].majorchar[5] に発展する。 char* という意味です。これはポインタ型である。

enteredMajorchar . これは積分型である。

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

おそらく、デカール enteredMajor このように

char enteredMajor[5];

といった具合に比較します。

strcmp(student[i].major, enteredMajor) == 0