无法理解循环迭代

时间:2017-02-17 22:06:18

标签: c++

我是初学者,试图了解循环的工作原理。我试图使用下面的代码在数组中找到max元素的值。它只运行了4次迭代,虽然我设置了n值=数组的大小= 5.因此,它没有测试最后一个元素的if条件,不知道为什么?请建议。

int main()
{
    int a[] = {1,2,3,4,5};
    int* max;
    int i, n;

    n = sizeof(a) / sizeof(a[0]);
    max = a;
    for(i=0; i<n; i++)
    {
        if(a[i] > *max)
        {
            *max = a[i];
            i++;
        }       
   }
   cout << "Maximum element in the array is : " << *max << endl;    
}

O / P: - 数组中的最大元素是:4

5 个答案:

答案 0 :(得分:1)

这是新的&#39; C ++样式代码,您应该更喜欢以这种方式编写for循环,它会自动遍历所有值,因此您不必担心索引,因此它更安全,因为在C ++中您可以遍历数组并具有未定义行为 自动&#39;变量&#39;将自动检测您要使用的类型,在这种情况下,编译器将auto用作int。 一些reading关于自动和循环

#include <iostream>

using namespace std;

int main()
{
  int arr[]{ 1,2,3,4,5 };
  auto max = INT_MIN;

  for (auto const &val : arr)
  {
    if (val > max)
        max = val;
  }

  cout << "The max value is: " << max << endl;

  return 0;
}

答案 1 :(得分:0)

您的代码会增加i两次,因此它不会查看每个元素。摆脱i++;内的if。它已经每循环增加一次,这就是你想要的。

答案 2 :(得分:0)

为什么在循环内增加i?会发生的是,每次输入if时,都会跳过下一个元素,因为您将i递增两次(一次在循环增量中,一次在i++上)。

答案 3 :(得分:0)

您在i循环中递增if,这导致您跳过当前循环后的元素。

删除i++;行,你应该没问题。

如果您在i, *max循环结束时打印for,则需要参考:

  • 1,1(1 = 1如果内省,如果跳过)
  • 3,2
  • 5,4

注意你从未真正看过3或5,因为双倍增量会导致你绕过它们。

答案 4 :(得分:-1)

我有两个增量; 当您需要将指针的地址更改为新值时,您已将指针值更改为当前值;

enter image description here