C++ ISO C&x2B+;禁止指针和整数之间的比较?
代码如下:C++ ISO C&x2B+;禁止指针和整数之间的比较?,c++,arrays,pointers,integer,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: ";
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;
}
}
}
student[i].major
是一个char
数组;在表达式中使用时,它会衰减为指向char
的指针。代码将其与类型为char
的enteredMajor
进行相等性比较。因此抱怨:无法比较指针和整数(因为char
被提升为int
)。student[i]。major
是一个char
数组;在表达式中使用时,它会衰减为指向char
的指针。代码将其与类型为char
的enteredMajor
进行相等性比较。因此抱怨:无法比较指针和整数(因为char
被提升为int
)。考虑以下片段:
student[i].major == enteredMajor
student[i].major
是一个char[5]
,在这个上下文中,它被分解为char*
。这是指针类型
enteredMajor
是一个char
。这是一种积分型
您无法比较这些类型
也许你的意思是这样写的:enteredMajor
:
char enteredMajor[5];
并将它们进行如下比较:
strcmp(student[i].major, enteredMajor) == 0
考虑一下这个片段:
student[i].major == enteredMajor
student[i].major
是一个char[5]
,在这个上下文中,它被分解为char*
。这是指针类型
enteredMajor
是一个char
。这是一种积分型
您无法比较这些类型
也许你的意思是这样写的:enteredMajor
:
char enteredMajor[5];
并将它们进行如下比较:
strcmp(student[i].major, enteredMajor) == 0
我忘了提到,它是这样一行:
if(student[I].gpa>=gpaThreshold&&student[I].major==enteredMajor)
如果没有看到struct StudentRecord的声明,很难理解代码应该做什么。我需要在本地声明“I”吗?就像在for循环中一样,这一切都很糟糕。你希望一个字符数组和一个单独的char
之间的比较做什么?我忘了提到,它是这样一行:if(student[I].gpa>=gpaThreshold&&student[I].major==enteredMajor)
如果看不到struct StudentRecord的声明,就很难理解代码应该做什么。我需要在本地声明'I'吗?就像在for循环中一样,这一切都很糟糕。您希望在字符数组和单个char
之间进行什么比较?我可以做什么来修复它?这是我在代码中遇到的唯一问题,否则它会正确编译。我想让代码检查输入的专业是否与数组中的任何当前专业匹配。如果有,请执行for循环中的代码。@Evan-数组包含多个主循环?如果是,则搜索它以查看输入的元素是否与数组中的任何元素匹配。为一个包含5个元素的数组编写代码非常简单,或者您可以使用memchr
。我想这就是我的代码所做的。我想不是。我不能使用memchr,因为我的教授可能不希望这样。我不想听起来很可怜,但我不知道该怎么做。我能做些什么来修复它?这是我在代码中遇到的唯一问题,否则它会正确编译。我想让代码检查输入的专业是否与数组中的任何当前专业匹配。如果有,请执行for循环中的代码。@Evan-数组包含多个主循环?如果是,则搜索它以查看输入的元素是否与数组中的任何元素匹配。为一个包含5个元素的数组编写代码非常简单,或者您可以使用memchr
。我想这就是我的代码所做的。我想不是。我不能使用memchr,因为我的教授可能不希望这样。我不想听起来很可怜,但我不知道该怎么做。