logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak użyć sprintf do wyświetlenia liczby zmiennoprzecinkowej w C?

Rodanek93 12 Mar 2020 19:04 720 5
REKLAMA
  • #1 18526750
    Rodanek93
    Poziom 9  
    Posty: 96
    Ocena: 7
    Cześć,

    Piszę teraz program, ale zapętliłem się na próbie wykorzystania fprint której jeszcze nie stosowałem.
    Mam takie coś:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    Dlaczego nie wyświetla mi drugiej liczby?

    Możliwe, że podaje niewłaściwe %f bo powinno być inaczej, ale jeszcze tego nie ogarnąłem :)

    Pozdrawiam.
  • REKLAMA
  • #2 18527122
    Sam Sung
    Poziom 33  
    Posty: 2018
    Pomógł: 227
    Ocena: 596
    Wygląda w miarę ok, tzn. ma szansę działać.
    Co się wyświetla, a co się powinno wyświetlać?
    I gdzie się to wyświetla? sprintf tylko wpisuje do tablicy. Powinieneś zadeklarować tab tak, żeby nie trzeba było jej rzutować na char *. Zaleca się też używać snprintf(buf, sizeof(buf), ...) żeby nie wyjechać poza bufor.
  • REKLAMA
  • #3 18527159
    Rodanek93
    Poziom 9  
    Posty: 96
    Ocena: 7
    Tablica: uint8_t tab[100]; (więc nadmiarowy)
    Wyświetla: "ADC: 1481_", więc brakuje tego %f
    Co ciekawe jeśli zmienię na:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    to dostaje to samo:
    "ADC: 1481_"
  • REKLAMA
  • #4 18527249
    Sam Sung
    Poziom 33  
    Posty: 2018
    Pomógł: 227
    Ocena: 596
    No cóż, wygląda więc na to, że używasz biblioteki standardowej C, która nie obsługuje %f. Może w dokumentacji środowiska/kompilatora jest opisane, czy da się to włączyć i jak. Gdyby się nie dało, to - o ile same operacje zmiennoprzecinkowe działają - można użyć czegoś w stylu printf("%u.%03u", x/1000, x%1000);
    A jak nie, to trzeba się pobawić w obliczenia na liczbach całkowitych.

    A tak w ogóle, to po co marnować miejsce na karcie SD na zapisywanie tej samej informacji w dwóch postaciach? Jest taki wymóg, że właśnie tak musi wyglądać plik?
  • REKLAMA
  • #5 18527263
    Rodanek93
    Poziom 9  
    Posty: 96
    Ocena: 7
    Wymogiem jest samodzielna nauka C na bazie HAL w ARMach :)

    Czyli HAL ma tylko obsługę liczb całkowitych w sprintf? :(
  • #6 18527295
    szelus
    Poziom 34  
    Posty: 1508
    Pomógł: 315
    Ocena: 53
    To zależy od środowiska i procesora. Obsługa formatów zmiennoprzecinkowych w printf "kosztuje" sporo, w sensie rozmiaru biblioteki, dlatego wiele środowisk ma ją domyślnie wyłączoną, zwłaszcza, jeżeli sam procesor nie obsługuje sprzętowo zmiennego przecinka.
REKLAMA