【问题标题】:ISO C++ forbids comparison between pointer and integer?ISO C++禁止指针和整数之间的比较?
【发布时间】:2012-12-06 01:07:55
【问题描述】:

代码如下:

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。

我想将输入的专业与数组中的“专业”值进行比较。 例如。我输入化学 -转向化学 - 获取该专业下的所有学生(和 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;
};

【问题讨论】:

  • 我忘了说,就是这一行:if (student[i].gpa &gt;= gpaThreshold &amp;&amp; student[i].major == enteredMajor)
  • 如果没有看到 struct StudentRecord 的声明,很难弄清楚代码应该做什么。
  • 我需要在本地声明'i'吗?如,在 for 循环内?
  • 这一切都很好。您希望字符数组和单个 char 之间的比较做什么?

标签: c++ arrays pointers integer


【解决方案1】:

考虑这个片段:

student[i].major == enteredMajor

student[i].majorchar[5],在这种情况下会演变为 char*。这是一个指针类型。

enteredMajorchar。这是一个整数类型。

您无法比较这些类型。

也许你的意思是这样贴enteredMajor

char enteredMajor[5];

然后像这样比较它们:

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

【讨论】:

    【解决方案2】:

    student[i].major 是一个char 数组;在表达式中使用时,它会衰减为指向char 的指针。代码将其与类型为charenteredMajor 进行比较是否相等。因此抱怨:不能比较指针和整数(因为char 被提升为int)。

    【讨论】:

    • 我能做些什么来解决它?这是我在代码中遇到的唯一问题,否则它可以正确编译。
    • 我希望代码检查输入的专业是否与数组中的任何当前专业匹配。如果是,则执行 for 循环中的代码。
    • @Evan - 数组包含多个专业?如果是这样,请搜索它以查看输入的元素是否与数组的任何元素匹配。编写代码来为 5 个元素的数组执行此操作很容易,或者您可以使用 memchr
    • 好吧,我认为这就是我的代码所做的。我想不会。我无法使用 memchr,因为我的教授可能不希望这样。
    • 我讨厌听起来很可怜​​,但我不知道该怎么做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多