Czar "0" z przodu... - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica) +--- Wątek: Czar "0" z przodu... (/watek-czar-0-z-przodu) Strony:
1
2
|
Czar "0" z przodu... - Lession - 09-02-2023 Moi drodzy, mam średnia wiedze na temat programowania, ale napisałem juz kilka programów nawet działających, ale prostacko... chciałem zrobić tak, żeby monitor wyświetlał w przypadku mniejszej liczby od 10 "0" z przodu, ale mi nie wychodzi to... Monito r ma podawać np czas działania programu w zapisie podobnym: 01:15 min Załozyłem, że będzie zmienna char 2liczby[2] i że jak będzie liczba <10 to 2liczby[0] = "0", a 2liczby[1] wartość tej liczby... Napisałem taki kod (jeden z wariantów, ale żaden nie zadziałała: Kod: //Monitor Kompilator twierdzi, że błedem jest zapis: char zero = "0"; Why? Gdy napiszę: pole2[0] = "0"; - to to samo, że to bład? Dlaczego? Co mam robić, aby było dobrze? A! Monitor mam 16x2 dlatego takie założyłem dwie tablice. Tak samo nie rozumiem, czemy nie da dary zapisać: dtostrf(zmienna, 2, 0, pole2[1]); ? Taki ze mnie słabiak... Pomocy! Nie chcę wiecznie pisac prymitywnie, jak do tej pory, a pomocy w tutorialach szukałem bezowocnie... Dzieku za wszwelkie podpowiedzi Pozdrawiam Spróbowałem zrobić z tego funkcję, która zwraca tablice 2 elementową char... też kompliator uznał, że błędem jest końcowy zapis: return "tablica"... - nie można zwracać tablicy? Teraz błędy są takie: warning: invalid conversion from 'char' to 'char*' [-fpermissive] strcat(tmptxt1, tmptxt2); i note: initializing argument 1 of 'char* strcat(char*, const char*)' extern char *strcat(char *, const char *); Natomiast taki zapis: tmptxt2[0] = 0; kompilator toleruje, a przwcie z to jest tablica char!!!! Why? RE: Dodawanie do czar "0" z przodu - Jarewa0606 - 09-02-2023 Nie wiem co kombinujesz bo dla mnie to trochę nieczytelne co kombinujesz. Ale: char zero = "0"; - jest błędem powinno być char zero = 0; bo chcesz definiować trzy znaki w jednym "" to się liczy jako znaki. RE: Dodawanie do czar "0" z przodu - Lession - 09-02-2023 (09-02-2023, 20:07)Jarewa0606 napisał(a): Nie wiem co kombinujesz bo dla mnie to trochę nieczytelne co kombinujesz. Dzięki. Jednak jak wpisze się 0 (gołe) to nic nie wyswieltla, a ja chciałem wyśfietlać 0... w tym miejscu (bo zdaje sie znak \0 - to znak końca?) I tak, jak zrobię tak: Kod: if(pole3[0]==0){wpis = 0;}else{wpis=pole3[0];} Kod: if(pole3[0]==0){wpis = 0;}else{wpis=pole3[0];} RE: Dodawanie do czar "0" z przodu - Lession - 09-02-2023 (09-02-2023, 20:07)Jarewa0606 napisał(a): Nie wiem co kombinujesz bo dla mnie to trochę nieczytelne co kombinujesz. Kombinuję zapis: 01:51 / 2h RE: Czar "0" z przodu... - MadMrQ - 09-02-2023 No toś chłopie sobie życie skomplikował... Na początek problem z char zero = "0" Deklarujesz char, a przypisujesz mu stringa. Albo robisz char *zero = "0" i wtedy masz tzw. C string, czyli po prostu tablicę, albo piszesz char zero = '0' i przypisujesz zmiennej typu char pojedynczy znak. " " oznacza stringa (char array), a ' ' pojedynczy znak. Cytat:Tak samo nie rozumiem, czemy nie da dary zapisać: dtostrf(zmienna, 2, 0, pole2[1]); ? Taki ze mnie słabiak...Zmienną o minimalnej szerokości 2 pól, o 0 pól po przecinku pakujesz do pole2[1], które jest pojedynczym znakiem. Czyli dwa pola pakujesz w jedno z uporem maniaka i kompilator robi fakap. Cytat:warning: invalid conversion from 'char' to 'char*' [-fpermissive]Tu podobnie - używasz char (pojedynczego znaku), a funkcja przyjmuje char*, czyli tablicę znaków, a właściwie wskaźnik do pierwszego elementu tablicy. Funkcja, której użyłeś char *strcat (char* strTo, const char* strFrom) przyjmuje C stringi jako parametry. Rozwiązanie Twojego problemu może okazać się dobrze użyte polecenie sprintf. Jak tego dokonać? Przeanalizuj sobie kod poniżej i poczytaj o znakach formatu typu %d, %f, %s itd. Kod: int main() RE: Czar "0" z przodu... - kaczakat - 09-02-2023 Można sobie użyć gotowej funkcji sprintf, np. taki kod: Kod: //sprintf - formatowanie do bufora http://mikrokontrolery.blogspot.com/2011/02/printf-instrukcja-rodzina.html 000:00:01 000:00:02 000:00:03 itd. RE: Czar "0" z przodu... - Lession - 10-02-2023 (09-02-2023, 21:56)MadMrQ napisał(a): No toś chłopie sobie życie skomplikował... Bardzo, bardzo dziekuję Jak dla mnie genialne Super. RE: Czar "0" z przodu... - Lession - 10-02-2023 (09-02-2023, 21:58)kaczakat napisał(a): Można sobie użyć gotowej funkcji sprintf, np. taki kod: Bardzo, bardzo dziekuję. Jeszcze u mnie nie zadziałało, ale pracuje nad tym RE: Czar "0" z przodu... - Lession - 11-02-2023 Mam jeszcze pytanie... chciałem napisać mijający czas procentowo, na przykładzie niżej: int czas_pozostaly_proc = (klepsydra_sek/sekundy_ustaw)*100; co jest de facto: int czas_pozostaly_proc = (100/3600)*100; i obie operacje daja mi wynik 0... why???? ktoś wie? jak zostawię: 100/3600 i zrobię ze zmiennej "czas_pozostaly_proc" double, to mam: 0.00 nie rozumiem... kombinuję z typami danych, ale nie wychodzi... za duży jest dzielnik? Jak sie domyslacie: klepsydra_sek - narasta a sekundy_ustaw - jest stała po ustawieniu... hm... tylko raz wyświetliło prawidłowy wynik, jak było 100% gdzieś zaokrągla? RE: Czar "0" z przodu... - Jarewa0606 - 12-02-2023 int czas_pozostaly_proc = (klepsydra_sek/sekundy_ustaw)*100; co jest de facto: int czas_pozostaly_proc = (100/3600)*100; Pewnie klepsydra_sek i sekundy_ustaw to zmienne całkowite, wiec masz źle i nawet ustawienie float czas_pozostaly_proc = (klepsydra_sek/sekundy_ustaw)*100; Nic nie zmieni bo przy obliczeniu nie wie że wynik jest float. I będzie liczył liczby całkowite gdzie: 100/3600 = 0 a 0*100 = 0. Musisz mu to wskazać zrub rzutowanie float czas_pozostaly_proc = (float(klepsydra_sek/sekundy_ustaw)*100); |