我是C ++的新手,所以请放轻松,我似乎无法弄清楚这里是什么问题。
#include <iostream>
using namespace std;
int max_of_four(int a, int b, int c, int d)
{
int max = a;
int nums[] = {a, b, c, d};
for(int i = 0; i < 4; i++)
{
if(nums[i] > nums[i--])
{
max = nums[i];
}
else
{
;
}
}
return max;
}
int main()
{
int a, b, c, d;
cin >> a >> b >> c >> d;
max_of_four(a, b, c, d);
}
它所做的只是请求输入,但不做其他任何事情! 任何帮助,将不胜感激! PS:应该取4个数字并返回最大的一个。
答案 0 :(得分:2)
此行if(nums[i] > nums[i--])
的问题导致循环永不结束。
即使使用if(nums[i] > nums[i-1])
进行修复,您的逻辑也是错误的,因为它不返回最大元素。
请考虑以下4个整数:
a=1, b=4 c=1,d=2
您的代码将返回2
,而最大元素为4
尝试以下类似方法:
max = nums[0];
for(int i = 1; i < 4; i++)
{
if(nums[i] > max) //issue here
{
max = nums[i];
}
}
并且由于您使用的是C ++,而未使用std::max_element
?
只需:
int nums[] = {a, b, c, d};
return *(std::max_element(nums, nums+4));
答案 1 :(得分:1)
您的for
循环将i
用i++
加1,然后您的数组运算符用i--
将其减少1。因此i
永远不会改变,循环永远不会结束。
for(int i = 0; i < 4; i++)
{
if(nums[i] > nums[i--])
// ^^^ here's your issue
{
max = nums[i];
}
else
{
;
}
}
您是否要在i
之前的一个插槽中访问元素?如果是这样,则需要执行nums[i-1]
。不过请注意:如果i
为0,它将超出数组的范围。
答案 2 :(得分:1)
您有一个无限循环,因为在循环中索引i会减小
for(int i = 0; i < 4; i++)
^^^
{
if(nums[i] > nums[i--])
^^^^
{
max = nums[i];
}
// ...
,然后在第三个表达式的for语句中将其递增
也无需使用循环,因为标头std::max
中已经声明了标准函数<algorithm>
。
你可以写
#include <algorithm>
//...
int max_of_four(int a, int b, int c, int d)
{
return std::max( { a, b, c, d } );
}
主要是可以输出值
std::cout << "The maximum value is " << max_of_four( a, b, c, d ) << '\n';