我试图制作一个程序,从用户那里得到8个数字,并找到总和。如果任何数字表示用户输出超过21,那么我希望显示这些数字。我得到的错误是:
main.cpp:在函数'int main()中:main.cpp:15:23:错误:ISO C ++禁止指针和整数之间的比较[-fpermissive]
以下是来源:
#include <iostream>
using namespace std;
int main() {
const int NUM_ELEMENTS = 8; // Number of elements
int userVals[NUM_ELEMENTS]; // User numbers
int i = 0; // Loop index
int sumVal = 0; // For computing sum
int prntSel = 0; // For printing greater than 21
// Prompt user to populate array
cout << "Enter " << NUM_ELEMENTS << " integer values..." << endl;
for (i=0; i > prntSel; ++i) {
if (userVals > 21)
cout << prntSel << endl;
}
for (i = 0; i <= NUM_ELEMENTS; ++i) {
cout << "Value: " << prntSel << endl;
cin >> userVals[i];
}
// Determine sum
sumVal = 0;
for (i = 0; i < NUM_ELEMENTS; ++i) {
sumVal = sumVal + userVals[i];
}
cout << "Sum: " << sumVal << endl;
return 0;
}
答案 0 :(得分:1)
你在这里有一条线
if (userVals > 21)
应该阅读
if (userVals[i] > 21)
userVals
是int
的数组。在循环遍历数组时,需要使用[i]
从数组中索引该值。
你还有另一个问题。
for (i = 0; i <= NUM_ELEMENTS; ++i)
数组的有效索引为0
,1
,2
... 7
。您不能索引userVals[8]
,否则您将索引超出范围并产生未定义的行为。您应该将循环更改为
for (i = 0; i < NUM_ELEMENTS; ++i)
答案 1 :(得分:1)
错误几乎解释了这个问题,
if (userVals > 21)
在这一行中,您试图将数组的基址与数字进行比较。 要比较数组的元素,请使用索引..
if (userVals[i] > 21)
另一个问题是`for loops
for (i=0; i > prntSel; ++i)
在此,prntSel
具有值0
,因此循环条件在开始时失败,并且循环内没有任何内容被执行。
for (i = 0; i <= NUM_ELEMENTS; ++i)
在此for
循环中,使用NUM_ELEMENTS
检查条件,其值为8
。由于数组具有8
个元素,因此有效索引为0 1 2 3 4 5 6 7
,最后一次迭代将超过数组索引。
答案 2 :(得分:0)
您的代码没有任何优点,修复一个错误将跟随另一个错误,还有很多工作要做:
int userVals[NUM_ELEMENTS]; // User numbers
它是一个数组,你试图将它与后来的int进行比较
for (i=0; i > prntSel; ++i) { // shouldn't it be i < NUM_ELEMENTS?
if (userVals > 21) // comparing array with int, should be `userVals[i]`
cout << prntSel << endl;
}
prntSel和我都是零,这意味着它永远不会在那里结束
for (i = 0; i <= NUM_ELEMENTS; ++i) {
cout << "Value: " << prntSel << endl;
cin >> userVals[i];
}
与以前一样,使用prntSel[i]
-
我的2美分