问题本身很简单。
这是我的代码:
`
#include <iostream>
#include <array>
using namespace std;
int const SIZE = 5;
int main(){
string flav[SIZE] = {"Mild", "Medium", "Sweet", "Hot", "Zesty"};
int cnt[SIZE];
int total=0;
int max=0;
for(int i = 0; i <5; i++)
{
cout<<"Please Input the number of jars sold for "<<flav[i]<<"."<<endl;
cin>>cnt[i];
total = cnt[i] + total;
}
cout << "The total amount of Salsa sold was "<<total<<" units."<<endl;
for(int i = 1; i<SIZE; i++)
{
if(cnt[i] > max)
max = cnt.at[i];
}
cout <<"The highest selling flavor was "<< flav[max]<<endl;
}`
我想将max分配给数组中最高值的位置,而不是值本身。
我在这里做错了什么?
感谢。
编辑:酷。新问题。啊。
答案 0 :(得分:1)
int maxvalue = cnt[0];
int maxidx = 0;
for(int i = 1; i < SIZE; i++)
{
if (cnt[i] > maxvalue)
{
maxvalue = cnt[i];
maxidx = i;
}
}
更新:至于您的其他错误,cnt
不是class
或struct
,并且没有at[]
成员。它只是一个普通的普通数组,因此您需要将cnt.at[i]
替换为cnt[i]
。
您还缺少循环内if
语句所需的大括号,因此您始终无条件地在每个循环交互中设置iMaxIdx = i
:
for(int i = 1; i<SIZE; i++)
{
if(cnt[i] > max) // <-- no braces
max = cnt.at[i]; // <-- only executed on higher values
iMaxIdx = i; // <-- always executed unconditionally
}
因此,当循环退出时,iMaxIdx
总是为SIZE-1
。您需要添加大括号,以便仅在找到更高值的迭代中更新iMaxIdx
,如上例所示:
for(int i = 1; i<SIZE; i++)
{
if(cnt[i] > max)
{ // <-- add this
max = cnt[i]; // <-- not cnt.at[i]
iMaxIdx = i; // <-- only executed on higher values
} // <-- add this
}
答案 1 :(得分:0)
您需要int iMaxIdx;
以及何时更新max
更新iMaxIdx
for(int i = 1; i<SIZE; i++)
{
if(cnt[i] > max){
max = cnt.at[i];
iMaxIdx = i;
}
}
// now use iMaxIdx as it contains the index
答案 2 :(得分:0)
当您找到所需的元素时,使用for循环访问数组的每个元素。 For iterator值将是位置
答案 3 :(得分:0)
int maxid=0;
for(int i = 0; i<SIZE; i++)
{
if(cnt[i] > max)
{
max = cnt[i];
maxid=i;
}
}
cout <<"The highest selling flavor was "<< flav[maxid]<<endl;
编辑了最后一节。这是你想要的我相信吗?