返回具有最高值的数组的名称

时间:2015-02-14 04:00:46

标签: c++ arrays

刚开始学习C ++几周了,并且正在进行一些练习。虽然我仍然试图返回数组中保存最大数字的数组名称。例如,我为10个人制作了一个阵列,因为我所拥有的每个人都输入了他们吃的煎饼数量,现在我想让那些吃最多煎饼的人回来。只是不知道该怎么做。它在第二个if声明中分崩离析。

int main()
{

int pancakes[9] = {0,0,0,0,0,0,0,0,0};
int max = pancakes[0];
int i;
    int p;

for (int x=0; x<=9; x++)
{
   cout << "Enter number " << endl;
   cin >>  i;
   pancakes[x] = i;

   if(i > max)  
        max = i;
    pancakes[x] = p;

}

cout << endl;
cout  << p << " ate the most pcakes @ " << max << endl;

return 0;
}

3 个答案:

答案 0 :(得分:0)

你的循环和if语句应该如下。请参阅评论中的详细信息和说明:

for (int x=0; x<9; x++) // You need to exclude 9 (do not use <=) because the index start at 0
{
   cout << "Enter number " << endl;
   cin >>  i;
   //pancakes[x] = i; <-- This line and the array is not needed. With this also you actually don't need to 
   //                     store/save what people enter. You just need to keep the max and index

    if(i > max)  // if i (number entered) is bigger than the current max of pancakes
    {
        max = i; // You update the max to the new number entered (i)
        p = x + 1; // you store in p the array index + 1 (your array index start at 0 not 1) 
                   // of the current person who eat the max number of pancakes
    }
}

初始化:

//int pancakes[9] = {0,0,0,0,0,0,0,0,0}; <- The array is not needed. See my comment in above code
int max = 0; // More clean and readable

答案 1 :(得分:0)

一些事情:

1)你的迭代是错误的。它应该是:

for (int x = 0; x < 9; ++x)

如果你使用x&lt; = 9,你实际上将完成循环的10次迭代,最后一次迭代将在煎饼阵列的末尾和损坏的内存中运行。

2)当你找到一个新的最大值时,还要设置p等于x来记住谁有最多的煎饼。

3)你将max初始化为pancakes [0]。虽然这实际上会在这个实例中为您提供正确的答案,但您应该明确地初始化max = -1以指示启动时的无效最大值。您还应初始化p = -1以指示启动时无效的食者。这些初始化将允许您在没有输入时区分和处理这种情况。

4)优化:你真的不需要一个阵列来记住每个人吃的煎饼#如果这就是你正在做的事情。您可以根据需要循环读取输入并与最大值进行比较

答案 2 :(得分:0)

我正在打电话,所以如果有格式问题,我会道歉。

你说你的代码在你的第二个if语句中崩溃但是只有一个if语句,所以我假设它是if语句中的第二行。但是,这有两个问题。

  1. 您没有正确录制此人: 煎饼[X] = P;
  2. 这“应该是”:     P = X;

    1. 你需要在整个语句中加上大括号。例如:

      if(i&gt; max){     max = i;     P = X; }