我是初学者,试图了解循环的工作原理。我试图使用下面的代码在数组中找到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
答案 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
,则需要参考:
注意你从未真正看过3或5,因为双倍增量会导致你绕过它们。
答案 4 :(得分:-1)