Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 28 gru 2024, o 05:59


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 1 paź 2016, o 15:54 
Offline
Nowy

Dołączył(a): 27 mar 2016
Posty: 16
Lokalizacja: Września
Pomógł: 0

Witam szanownych forumowiczów.

Ponownie mam pewien problem dotyczący może nie tyle działania programu (bo ten akurat działa), lecz raczej zrozumienia sposobu jego działania.
Poniżej fragment kodu, funkcja:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Funkcja pochodzi z Bluebooka, a konkretniej to fragment biblioteki dla LCD na HD44780. Została jedynie delikatnie przemodelowana przeze mnie.

A teraz co do problemu. Chodzi mi o warunek do instrukcji if () w pętli - ni w ząb nie potrafię zrozumieć jego formy. Wiem tylko tyle, że gdy w stringu pojawi się NULL (koniec stringa) to wtedy warunek powinien dać 1 i program za pomocą instrukcji break wyjść z pętli. Jednak zapis:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

jest dla mnie trochę nieczytelny, przynajmniej nie potrafię go rozszyfrować. Owszem, pojawi na wejściu się zero, więc !c == 0xFF i warunek da prawdę, ale po co w takim razie !c || c ?? Wiem tyle, że jest konieczny dokładnie w takiej formie, bo oczywiście nie mogłem się powstrzymać, żeby poeksperymentować przy tym i rzeczywiście warunek w innej formie nie działa, ale.. no właśnie, dlaczego?

Pozdrawiam / Best regards

PrimeSoul



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2016, o 16:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
PrimeSoul napisał(a):
więc !c == 0xFF

To nie do końca tak, dla c==0 !c jest prawdą bez konkretnej wartości.
W if'ie sprawdzane jest czy c==0 (pierwszy człon) lub c==0xFF.

Pozdr.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2016, o 16:13 
Offline
Nowy

Dołączył(a): 27 mar 2016
Posty: 16
Lokalizacja: Września
Pomógł: 0

Poczytałem w międzyczasie trochę o priorytetach i rzeczywiście zobaczyłem swój błąd w rozumowaniu, jednak dalej czegoś nie rozumiem.
Wg tabeli kodów ASCII żaden znak nie ma kodu 0xFF. Więc sprawdzanie 0 powinno wystarczyć. A jakimś dziwnym dla sposobem nie wystarcza :/

EDIT: Krótki test i sprawa wyjaśniona - sam warunek !c wystarcza. Nie wiem, czemu wcześniej mi układ szalał, ale teraz działa. :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2016, o 16:33 
Offline
Użytkownik

Dołączył(a): 25 lut 2015
Posty: 252
Lokalizacja: Lublin
Pomógł: 23

FF to jest wartość przechowywana w niezaprogramowanej komórce.
Proponuje jednak zostawić warunek w podanej na początku postaci.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2016, o 16:42 
Offline
Nowy

Dołączył(a): 27 mar 2016
Posty: 16
Lokalizacja: Września
Pomógł: 0

Bardzo cenna uwaga - ta dotycząca niezaprogramowanej komórki.
Natomiast co do zostawienia warunku to ja go zmieniam tylko do "poeksperymentowania" w celu zrozumienia działania, a potem przywracam domyślnie. Właściwie robię tak ze wszystkim w C. W ten sposób potrafię zrozumieć potem, o co biega :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO