卡在输入C ++的无限循环中

时间:2019-10-15 14:50:50

标签: c++

我是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个数字并返回最大的一个。

3 个答案:

答案 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循环将ii++加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';