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



Teraz jest 14 lis 2024, o 22:54


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 
Autor Wiadomość
PostNapisane: 8 sty 2013, o 22:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lip 2012
Posty: 203
Lokalizacja: Sosnowiec
Pomógł: 2

Witam

Jestem w trakcie tworzenia prostego menu na wyświetlaczu, po obejrzeniu filmu Mirka o strukturach stwierdziłem że użyję ich w swoim programie (łatwo potem się odwoływać do zmiennych)
Tak przynajmniej mi się wydawało
Za kolejną radą Mirka sprawdzam wszystko co wpisuję na bieżąco i tak powstał ten krótki kawałek kodu:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Niestety końpilatorowi nie podoba się takie definiowanie zmiennej KS_menu[0].str[].
O co chodzi ? czy istnieje jakiś ludzki sposób definiowania stringów w strukturze ?

Dodam że taki string będzie potem wykorzystany w paru funkcjach.

Mirku zareklamowałeś struktury to teraz się tłumacz ;P

_________________
sig on ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 sty 2013, o 22:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lip 2012
Posty: 203
Lokalizacja: Sosnowiec
Pomógł: 2

A to jest sposób który podał mi Anty
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Niestety, delikatnie mówiąc jest średnio wygodny w użyciu ;)

_________________
sig on ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 sty 2013, o 23:13 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27308
Lokalizacja: Szczecin
Pomógł: 1041

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



??????????????????????????? wewnątrz funkcji main() ?????????????????????????????

Panowie ;) a może tak jeszcze raz obejrzeć poradnik VIDEO bo mi ręce opadają :(

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2013, o 01:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 kwi 2012
Posty: 195
Pomógł: 0

Kompilator tego zwyczajnie nie rozumie bo odwołujesz się do tablicy
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
(jej pierwszego elementu) o indeksie 0 wskazującym na strukturę w której zawarłeś
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
tablicę 15-o elementową typu char i próbujesz załadować do niej C-stringa. Czyli do zerowego elementu str[] próbujesz wsadzić C-stringa - a tak się moim zdaniem nie da.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2013, o 08:27 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27308
Lokalizacja: Szczecin
Pomógł: 1041

Oczywiście masz rację kidcowboy i to całkowitą co do tego że twoim zdaniem tak się nie da ;) jak piszesz na końcu

ale mam nadzieję, że zwrócicie uwagę na ten pasztet w postaci definiowania TYPU wewnątrz funkcji np main(), jak napisałem wyżej. Że dalej tak nie będziecie robić ?

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2013, o 08:32 

Pomógł: 0

Nie wiem, czy dobrze podpowiem, ale przecież można użyć wskaźników na zmienne tablicowe oraz funkcji strcpy();

A jak nie to przecież myk z zwykłym forem wystarczy, ewentualnie wcześniej sobie dla pewności zbadać długość stringa.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2013, o 08:34 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27308
Lokalizacja: Szczecin
Pomógł: 1041

rezasurmar napisał(a):
A jak nie to przecież myk z zwykłym forem wystarczy,....


a memcpy() to drugie po strcpy()

więc szybciej, lepiej i optymalniej niż nawet bawienie się z for'em ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2013, o 08:49 

Pomógł: 0

O widzisz, co doświadczenie to doświadczenie, sam jeszcze nie znam wielu gotowych funkcji :). I trzeba sobie radzić na piechotę ;).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2013, o 14:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lip 2012
Posty: 203
Lokalizacja: Sosnowiec
Pomógł: 2

mirekk36 napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



??????????????????????????? wewnątrz funkcji main() ?????????????????????????????

Panowie ;) a może tak jeszcze raz obejrzeć poradnik VIDEO bo mi ręce opadają :(


Mój błąd, przeoczyłem, nie pomyślałem.

Poprawiony kod:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i błąd:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Znowu robię coś źle, czy tak po prostu nie można ?

zaraz będę próbował z memcpy()

_________________
sig on ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2013, o 15:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 kwi 2012
Posty: 195
Pomógł: 0

Przecież Mirek już przyklepał to co napisałem powyżej nie możesz do zerowego elementu tablicy wpisać C stringa bo się nie zmieści ( niezgodność typów występuje) a nawet gdyby udało Ci się skompilować jakimś cudem program to otrzymałbyś ze słowa "napis" tylko "/0" ( zerowy element tablicy C-stringa ) .
P.S.Typ struktury musi być poza main () bo inaczej zmienna "menu" byłby typu automatycznego a nie jest wtedy zerowana przy starcie programu i mógłbyś potem uzyskać "śmieci" ( najgorszy błąd do wychwycenia - bo kompilator nie będzie krzyczał )



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2013, o 15:31 

Pomógł: 0

Masz jakieś kocie błędy, co chwile to gdzie indziej, błądzisz synu błądzisz ;).

Dojdź do tego dlaczego wywala ci błąd w GLCD_....... małe kroczki pamiętaj, nie zmieniaj za dużo na raz. Najpierw doprowadź by ci się program kompilował, nawet jak nie będzie nic wyświetlał.

No i reszta j/w

PS. Sam będąc totalnym lamą w C na początku pisania programu, jeżeli mi coś nie idzie, to po prostu wyświetlam jakieś stałe, albo w kilku miejscach wrzucam chamsko _delay wyświetlając interesujące mnie zmienne na wyświetlaczu, dzięki temu łatwiej mi debugować.

Ewentualnie można wykorzystać MM, czyli Myk Mirkowy z wywalaniem zmiennych po RS232 :D, wtedy praktycznie można sobie wysłać każdą zmienną powstającą w programie na terminal :).

No, ale najpierw zacznij od naprawienia tego błędu z tablicami.....



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2013, o 16:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lip 2012
Posty: 203
Lokalizacja: Sosnowiec
Pomógł: 2

Kodcowboy coś mi się wydaje że źle zrozumiałeś Mirka...
Nigdy nie robiłeś czegoś takiego:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Nie ma błędu w GLCD tylko warning (ja w tym nie grzebałem).

Z wyświetleniem na LCD nie mam problemu, problem jest z deklaracją.

_________________
sig on ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2013, o 16:18 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27308
Lokalizacja: Szczecin
Pomógł: 1041

1boobik1 ---> to niestety ty nie zrozumiałeś mirka :( i książki i to mocno .... - przecież kidcowboy zwrócił ci uwagę na tego MEGA BABOLA w twoim programie:

KS_menu[0].str[]="napis"

a nie na to co ty wyżej piszesz. To nie działa i nigdy w C nie będzie działać - ponieważ to nie jest Bascom albo C++ gdzie mamy np klasę string.

Więc nie opowiadaj też że tak można:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


bo czasem można ale czasem nie można - to zależy. Na prawdę NIESAMOWCIE brak tobie poćwiczenia PODSTAW z tablicami i dlatego takie KOSMICZNE BABOLE ROBISZ :(

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2013, o 16:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lip 2012
Posty: 203
Lokalizacja: Sosnowiec
Pomógł: 2

Mirku z mojego ćwiczenia nigdy nic dobrego nie wychodzi tylko błędy w kompilacji jak widzisz.
Chciałbym tylko wiedzieć kiedy można a kiedy nie można i dlaczego.
Ale nie ważne, temat można skasować

_________________
sig on ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2013, o 16:52 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27308
Lokalizacja: Szczecin
Pomógł: 1041

1bobik1 napisał(a):
Mirku z mojego ćwiczenia nigdy nic dobrego nie wychodzi tylko błędy w kompilacji jak widzisz.
Chciałbym tylko wiedzieć kiedy można a kiedy nie można i dlaczego.
Ale nie ważne, temat można skasować


A dlaczego skasować - postaraj się powoli i z niego wyciągać wnioski i z podpowiedzi jakie tu padły ...

gdy definiujesz zmienną GLOBALNĄ to możesz spokojnie napisać:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



ale gdy tę samą zmienną definiujesz wewnątrz jakiejś funkcji - to nie rób jej inicjalizacji bo tragicznie nadwyrężasz STOS ale i czas wykonywania funkcji i nawet tak z marszu nie jestem pewien teraz czy to w ogóle kompilator dopuszcza.

rozumiesz ?

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2013, o 17:20 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Odbiegamy od tematu. Możesz kolego 1bobik1 tak zrobić:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

czyli inicjować string w momencie definiowania zmiennej. Nie możesz traktować tablic jak innych zmiennych i nie da się wprost porównywać dwóch napisów, dodawać ich kopiować jednego do drugiego itd., bo tak jest w języku C i do tego typu operacji są specjalne funkcje. W C++ możesz sobie przeciążać operatory i robić takie sztuczki.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2013, o 17:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lip 2012
Posty: 203
Lokalizacja: Sosnowiec
Pomógł: 2

Mirku WYDAJE mi się że rozumiem.

Krauser twoim sposobem "menu KS_menu[5] = {{"napis",0,0}};" kompilacja przebiegła ok.
Ale czy da się potem jakoś wyciągnąć te dane to jak na razie ciężko mi sprawdzić.

_________________
sig on ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2013, o 11:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 kwi 2012
Posty: 195
Pomógł: 0

1bobik1 Możesz wyciągać - oczywiście ! Np. za pomocą operatora kropki "." Ale stringa z tablicy nie wyciągniesz tak. Będziesz albo musiał wyciągnąć "napis" znak po znaku ( np. przy pomocy pętli for lub while inkrementując adres komórek ) aż do znaku zerowego "\0" - i ten znak możesz wykorzystać w warunku. Możesz napisać sobie w związku z tym funkcje która Ci pojedyncze znaki przetworzy na łańcuch tzn. {'n','a','p','i','s'} na "napis\0"
Z tego co wyczytałem to twórcy C stworzyli znak zerowy właśnie dlatego abyś mógł go wykorzystać w funkcji w postaci warunku - tak odróżnili pojedyncze znaki od łańcucha- Możesz też skorzystać z gotowej funkcji strcopy która do docelowej tablicy skopiuje Ci "napis" ze znakiem "\0" - tylko trzeba pamiętać by ta tablica była odpowiednio duża ( tu 6 znaków bo 5 na "napis " i 1 dodatkowy na "\0")



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: 18 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 5 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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO