"пустое значение не игнорируется, как должно быть" При попытке сортировать массив - PullRequest
0 голосов
/ 03 апреля 2020

Я новичок в программировании и пытаюсь запрограммировать датчик. Я сортирую массив, в который я строю вход от датчика. Но при сортировке возникает проблема:

состояние выхода 1
значение void не игнорируется, как и должно быть "

Вот мой код:

#include <ArduinoSort.h>

int a[10];
int b[10];
int sensor1 = A0;
int sensor2 = A1;
int display1;
int display2;
int sort[10];

void setup() {
    // put your setup code here, to run once:
    Serial.begin(9600);
}

void loop() {
    // put your main code here, to run repeatedly:
    delay(100);
    Serial.print("Sensor 1: [");

    for (int i = 0; i < 11; i++) {
        display1 = analogRead(sensor1);
        a[i] = display1;
        sort[i] = sortArray(a, 10);
        if (i < 10) {
            Serial.print(String(sort[i]) + ",");
        } else {
            Serial.print(String(sort[i]));
        }
    }

    Serial.print("]");
    Serial.println();

    Serial.print("Sensor 2: [");
    for (int i = 0; i < 11; i++) {
        display2 = analogRead(sensor2);
        b[i] = display2;
        if (i < 10) {
            Serial.print(String(b[i]) + ",");
        } else {
            Serial.print(String(b[i]));
        }

    }
    Serial.print("]");
    Serial.println();
    Serial.println();

    //String hej = "Sensor 1"+ String(display1);
    //Serial.println(hej);
}

и в этой строке я получаю ошибку:

sort[i] = sortArray(a,10);

Ответы [ 2 ]

3 голосов
/ 03 апреля 2020

Функция sortArray () ничего не возвращает, т. Е. void.

Она сортирует переданный массив на месте, поэтому его нужно вызывать так:

sortArray(a, 10); // no return value assignment

Как указали от Бен Фойгт , вы неправильно инициализировали a, поэтому вам нужно сначала собрать все значения, а затем отсортировать их после l oop.

Вот ваш l oop (после исправления sortArray после l oop):

for (int i = 0; i < 11; i++) {  // 0-10 i.e. 11 iterations
    a[i] = analogRead(sensor1); // read values in the array
    // ...
}

sortArray(a, 10); // sort after the loop

Другая проблема заключается в том, что ваш l oop Условие равно i < 11, что означает итерации от 0 до 10, т.е. 11 итераций. Но используемые вами массивы имеют размер 10, то есть от 0 до 9 местоположений, так как массивы C ++ основаны на ZERO. Таким образом, это приводит к выходу за пределы допустимого диапазона, что приводит к неопределенному поведению .

Итак, ваши итерации l oop и размеры массива должны совпадать, т.е. 10 итераций и 10 областей памяти для напишите.

Лучше использовать константу и использовать ее во всех местах, подобных этому:

const int SIZE = 10;

int a[SIZE] = {0}; // initialize if it's not an overhead for arduino

for (int i = 0; i < SIZE; i++) {
    a[i] = analogRead(sensor1);
    // ...
}

sortArray(a, SIZE);
0 голосов
/ 03 апреля 2020

У вас несколько большая проблема с этим кодом.

Вы просто не можете "печатать выходные данные в отсортированном порядке", пока вы все еще собираете их. Вы не знаете, следует ли печатать «наименьшее» прямо сейчас или ждать, потому что появится еще меньшее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...