ISO C ++是否禁止指针和整数之间的比较?

时间:2012-12-06 01:07:56

标签: c++ arrays pointers integer

以下是代码:

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是一个结构,该行上唯一的整数是&#39; i&#39;,而指针(我必须假设)是.major。

我想要将输入的专业与&#34; Major&#34;进行比较。数组中的值。 例如。我输入Chem - 转向CHEM - 获取该专业以下的所有学生(以及GPA的门槛) - 显示上述声明(所有&#39; X&#39; major)的学生

有什么建议吗?救命?评论?积极/消极的反馈?

编辑:这是结构:

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

2 个答案:

答案 0 :(得分:2)

考虑这个片段:

student[i].major == enteredMajor

student[i].majorchar[5],在此上下文中会转换为char*。这是指针类型。

enteredMajorchar。这是一个完整的类型。

您无法比较这些类型。

也许你的意思就是去enteredMajor

char enteredMajor[5];

并将它们比作:

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

答案 1 :(得分:1)

student[i].major是一个char数组;当在表达式中使用时,它会衰减为指向char的指针。代码将其与具有类型enteredMajor的{​​{1}}进行相等性比较。因此投诉:无法比较指针和整数(因为char被提升为char)。