C++ 从数组中每隔3个连续元素进行选择,并使用函数进行比较

C++ 从数组中每隔3个连续元素进行选择,并使用函数进行比较,c++,arrays,C++,Arrays,这是我的完整代码。除了最后一部分,我必须以某种方式选择值并将它们发送到要比较的函数,所有操作都很正常。有什么建议吗 非常感谢 亚历克斯 你的逻辑在很大程度上是正确的。话虽如此,我有以下几点意见: int v1[a]; b=0; while(b <= (a-3)) { maximum(v1[b], v1[b+1], v1[b+2]); b+=3; } 您正在创建一个动态数组,就像它是一个固定大小的数组一样: #include <iostream> using

这是我的完整代码。除了最后一部分,我必须以某种方式选择值并将它们发送到要比较的函数,所有操作都很正常。有什么建议吗

非常感谢

亚历克斯

你的逻辑在很大程度上是正确的。话虽如此,我有以下几点意见:

int v1[a];
b=0;
while(b <= (a-3))
{
    maximum(v1[b], v1[b+1], v1[b+2]);
    b+=3;
}
您正在创建一个动态数组,就像它是一个固定大小的数组一样:

#include <iostream>
using namespace std;
// function to compare the three values
int maximum(int x, int y, int z) 
{
    int max;
    if (x > y) {
        max = x;
        if (z > max)
            max = z;

    } else {
        max = y;
        if (z > max)
            max = z;

    }
    return max;
}  
// main code

int main() {

    int i, a, b;
    cout << "La dimension de la table?" << endl; 

    // Ask user to select the size of the array, maximum 20. "a" is the size 
    cin >> a;
    while (a > 20) {
        cout << "La dimension maximum est 20! Reessayez!" << endl;
        cin >> a;
    }

    int v1[a];

    // ask user to fill the array
    cout << "Remplisez la table" << endl;
    for (i = 0; i < a; i = i + 1) {
        cin >> v1[i];
    }
    // using this variable to know when the loop should stop
    b = 0; 
    // selecting the 3 consecutive elements to compare
    while (b <= a) {
        for (i = b; i < 4; i = i + 1) { 
         // this is were it should compare the 3 selected values and print them
            cout << "Le maximum est " << maximum(v1[i], v1[i], v1[i]) << endl; 
        }
        // passing to the next 3 values

        b = b + 3; 
    }
}
该数组的定义如下:

int v1[a];
b=0;
while(b <= (a-3))
{
    maximum(v1[b], v1[b+1], v1[b+2]);
    b+=3;
}
因为编译时不知道大小。因此,您需要在运行时在堆中分配内存。另一个选项是按照Chris的建议使用std::vector

在函数调用的所有三个参数中,都向函数发送相同的值:

int* v1 = int[a];
这是一个小的打字错误,但会给出错误的结果

不需要嵌套循环来拾取每三个元素并将它们发送到函数

尝试:


希望有帮助

据我所知,您正试图将数组中的每个元素分为3组进行比较。为了达到这个目的

int maximum(int x, int y, int z) {
    int max=x;
    if(y>max) max=y;
    if(z>max) max=z;
    return max;
    }

或者std::vector,这样您就不会担心内存泄漏。并且可以将它传递到一个函数中,而不需要相应的大小。问题是我们必须只使用我们在课堂上看到的内容。还没有人告诉我们关于dinamic数组的任何事情…但是当我尝试选择第一个连续元素时,问题来了,接下来的3个元素等等。嘿,Alex。如果需要在运行时从控制台读取数组的大小,则必须使用dynamic array或std::vector。你在课堂上学过向量吗?没有。只是简单的数组。另一个问题:b=b+3和b+=3之间有什么区别?b=b+3和b+=3之间没有区别。它们是一样的,而后者比较短。这不是个好主意。假设我给你一个由一个元素组成的数组,我认为这并不能实现目标。它表示每3个连续元素选择一个。它一次抓取3个,但不是每3个连续组抓取一个,也就是说,它将抓取0、1和2个,但不是1、2和3个。@JamesAdkison,不是根据问题中应该编辑的,真的。@chris好的,我现在明白了。谢谢,詹姆斯说得对。它只适用于前6个元素。如果我想使阵列更大,它不会比较下一个阵列…你说一切正常是什么意思?那是哪一部分??