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 >= gpaThreshold && student[i].major == enteredMajor)
如果没有看到 struct StudentRecord 的声明,很难弄清楚代码应该做什么。
我需要在本地声明'i'吗?如,在 for 循环内?
这一切都很好。您希望字符数组和单个 char
之间的比较做什么?
【参考方案1】:
考虑这个片段:
student[i].major == enteredMajor
student[i].major
是 char[5]
,在这种情况下会演变为 char*
。这是一个指针类型。
enteredMajor
是char
。这是一个整数类型。
您无法比较这些类型。
也许你的意思是这样贴enteredMajor
:
char enteredMajor[5];
然后像这样比较它们:
strcmp(student[i].major, enteredMajor) == 0
【讨论】:
【参考方案2】:student[i].major
是一个char
数组;在表达式中使用时,它会衰减为指向char
的指针。代码将其与类型为char
的enteredMajor
进行比较是否相等。因此抱怨:不能比较指针和整数(因为char
被提升为int
)。
【讨论】:
我能做些什么来解决它?这是我在代码中遇到的唯一问题,否则它可以正确编译。 我希望代码检查输入的专业是否与数组中的任何当前专业匹配。如果是,则执行 for 循环中的代码。 @Evan - 数组包含多个专业?如果是这样,请搜索它以查看输入的元素是否与数组的任何元素匹配。编写代码来为 5 个元素的数组执行此操作很容易,或者您可以使用memchr
。
好吧,我认为这就是我的代码所做的。我想不会。我无法使用 memchr,因为我的教授可能不希望这样。
我讨厌听起来很可怜,但我不知道该怎么做。以上是关于ISO C++禁止指针和整数之间的比较?的主要内容,如果未能解决你的问题,请参考以下文章
Qt错误iso c++禁止指针和整数之间的比较-fpermissive