Как установить размер глобального массива из оператора if - PullRequest
0 голосов
/ 19 мая 2019

Я пишу этот код для Arduino. При компиляции я получаю сообщение об ошибке «В этой области не объявляется« сроки »(в строке рядом с нижней частью, где я пытаюсь распечатать время [i]), потому что я объявил массив внутри оператора if внутри цикла while Полагаю.

Если бы это была простая переменная, я мог бы просто объявить ее вне цикла, и это было бы исправлено, но проблема в том, что я знаю размер этого массива только один раз в операторе if.

void loop() {

  while (Serial.available()) {
    int inChar = Serial.read();

    if (isDigit(inChar)) {
      inString += (char)inChar;
    }

    if (!isDigit(inChar) && !timingExists) {
      int timing[inString.toInt()];
      inString = "";
      timingExists = true;
    }

    if (!isDigit(inChar) && timingExists) {
      timing[n] = inString.toInt();
      inString = "";
      n++;
    }

  }
  n = 0;
  for (int i = 0; i < (sizeof(timing) / sizeof(timing[0])) ; i++) {
    Serial.println(timing[i]);
  }

}

1 Ответ

1 голос
/ 19 мая 2019

Как насчет использования динамически выделяемой памяти? Объявите указатель на int вне области if.

int * timing = NULL;

А когда вы знаете размер массива, динамически выделяйте память, используя new.

timing = new int[NUMBER];

Где NUMBER - количество элементов, которые вы хотите сохранить в массиве.

Конечно, не забудьте удалить выделенную память, когда закончите.

delete [] timing;
...