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

Posted

技术标签:

【中文标题】ISO C++禁止指针和整数之间的比较?【英文标题】:ISO C++ forbids comparison between pointer and integer? 【发布时间】: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 之间的比较做什么? 【参考方案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,因为我的教授可能不希望这样。 我讨厌听起来很可怜​​,但我不知道该怎么做。

以上是关于ISO C++禁止指针和整数之间的比较?的主要内容,如果未能解决你的问题,请参考以下文章

Qt错误iso c++禁止指针和整数之间的比较-fpermissive

出现错误:“ISO C++ 禁止指针和整数 [-fpermissive] 之间的比较”如何解决?

共享内存 - 警告:指针和整数之间的比较

菜单的C“指针和整数之间的比较”警告

内存单元和 C++ 指针

reinterpret