Stránka 1 z 1

Výpis čísla s pevnou délkou

Napsal: 08 dub 2022, 12:31
od Caster
Potřebuji vypisovat čísla s pevnou délkou (2), za číslem jedna mezera. Nechápu, v čem je problém:

Kód: Vybrat vše

int8_t dny[6] = {
  -1,
  3,
  12,
  14,
  16,
  47
};

void setup() {
  Serial.begin(115200);
  while (!Serial) { delay(10); }
  Serial.println("Test vypisu");
}

void loop() {
  for (int i = 0; i < 6; i++) {
    Serial.printf("%2d ", dny[i]);
  }
  Serial.println();
  for (int i = 0; i < 6; i++) {
    Serial.printf("%2d!", dny[i]);
  }
  Serial.println();
  Serial.end();
  exit(0);
}
Test vypisu
-1 3 12 14 16 47
-1! 3!12!14!16!47!

Bez vykřičníku není před číslicí "3" žádná mezera i když by tam jedna měla být ("%2d ")

Re: Výpis čísla s pevnou délkou

Napsal: 08 dub 2022, 20:12
od AstroMiK
Mi to při kompilaci hlásí, že Serial.printf není implementováno.
'class HardwareSerial' has no member named 'printf';

Když se to ale zapíše "běžným způsobem" přes sprintf a pole znaků, tak to funguje podle očekávání a před trojkou se mezera (resp. dvě mezery) objeví:

Kód: Vybrat vše

Test vypisu
-1  3 12 14 16 47 
-1! 3!12!14!16!47!

Kód: Vybrat vše

int8_t dny[6] = {
  -1,
  3,
  12,
  14,
  16,
  47
};

char vystup[10];

void setup() {
  Serial.begin(115200);
  while (!Serial) { delay(10); }
  Serial.println("Test vypisu");
}

void loop() {
  for (int i = 0; i < 6; i++) {
    sprintf(vystup, "%2d ", dny[i]);
    Serial.print(vystup);
  }
  Serial.println();
  for (int i = 0; i < 6; i++) {
    sprintf(vystup, "%2d!", dny[i]);
    Serial.print(vystup);
  }
  Serial.println();
  Serial.end();
  exit(0);
}

Re: Výpis čísla s pevnou délkou

Napsal: 09 dub 2022, 01:39
od Caster
Díky za radu, už jsem z toho byl hotový ;) .