Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Łączenie znaków w string- Co jest nie tak?

wojtektorr 22 Lis 2012 22:24 1086 7
  • #1 22 Lis 2012 22:24
    wojtektorr
    Poziom 14  

    Witam wszystkich, chciałem sobie napisać programik przy użyciu klawiatury matrycowej i wyświetlacza lcd na którym to są wyświetlane znaki wpisane z klawiatury i dodatkowo po zatwierdzeniu umownym klawiszem polaczylo znaki w string (np. coś podobnego do weryfikowania pinu). Problem mój polega na tym jak wpisywane znaki umieścić do jednej tablicy i później wyświetlić całą tablice wpisanych znaków? Poniżej main:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 7
  • #2 22 Lis 2012 22:35
    superduo
    Poziom 13  

    Metod jest kilka (bez wnikania w Twój kod):

    1. po naciśnięciu każdego przycisku inkrementujesz licznik: i++
    2. odpowiadający guzikowi klawisz podstawiasz do tablicy: string[i++]=klawisz
    3. po naciśnięciu entera (lub po osiągnięciu max długości stringa) kończysz go zerem: string[i++]=0;

    Bez punktu 3 nie złożysz stringa bo w C każdy string kończy się znakiem zera.

    Dodano po 52 [sekundy]:

    i wyrzuć ten label (START: ) z kodu bo nie moge na to patrzeć :P

    0
  • #3 22 Lis 2012 23:36
    stanleysts
    Poziom 27  

    To rozwiązanie nie jest sprecyzowane poprawnie. Choćby dla pierwszego znaku masz i++ i potem wpisujesz ten znak do tablicy o indeksie 1, czemu nie zaczynać od zera? Przy wpisaniu zera nie trzeba już inkrementować tylko ustawić znów na zero.

    Ps. Labele faktycznie dla obrzydzenia kodu :P

    0
  • #4 23 Lis 2012 17:22
    wojtektorr
    Poziom 14  

    Zakręciłem się z tym i nie mogę rozwiązać problemu, robię jak superduo napisał ale kiedy powinien na wyświetlaczu pojawić się string to nie pokazuje nic, możecie wskazać błąd?

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #5 23 Lis 2012 19:21
    zumek
    Poziom 39  

    stanleysts napisał:
    ...
    Ps. Labele faktycznie dla obrzydzenia kodu :P

    Kolega autor, to chyba na Basic-u wychowany. :D
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Niech no kolega autor, poczyta o continue.

    A wracając do tematu - czy kiedy wciskasz klawisze, to pojawiają się ich kody na LCD :?:

    0
  • #6 23 Lis 2012 22:04
    wojtektorr
    Poziom 14  

    Tak, widać to co wciskam na klawiaturze, tylko po nacisnięciu klawisza który powoduje wyświetlenie tablicy code[] na wyświetlaczu pojawia się 0. O co Wam chodzi z tymi etykietami, nie może to być rozwiązane w ten sposób?

    0
  • #7 24 Lis 2012 10:29
    Fredy
    Poziom 27  

    1) W pętli skanujesz tylko 4 razy klawiaturę, a PIN ma z reguły 4 znaki plus znak do akceptowania . W twoim programie ten znak akceptowania nastąpi już po skasowaniu się zmiennej index. Zatem ,jeśli chcesz mieć PIN 4 znakowy to musisz rozszerzyć ten for o 1 i zwiększyć pojemność tablicy code.
    2)Jesteś pewien tego, że w przypadku naciśnięcia akceptacji tego pinu program na pewno wchodzi tam gdzie masz wyświetlenie tekstu? Może pomyliłeś dla tego znaku wartość binarną w switchu? Zastąp na chwilę to wyświetlenie tekstu, wyświetleniem znaku i zobacz czy w ogóle tam wchodzisz.
    3)Jeśli chodzi o te koszmarne goto etykieta; , to wydaje mi się, że etykietę pisze sie po prostu jako etykieta: a nie tak jak u ciebie etykieta:; (bez tego średnika)
    4)Po co ciągle od nowa deklarujesz zmienną index? Zadeklaruj ją sobie na początku raz, a potem tylko kasuj w pętli.
    5) Uwierz ,że bez tego goto da się napisać ten program i będzie on zdecydowanie czytelniejszy. Goto ma sens tylko w wyjątkowych okolicznościach.

    0
  • #8 24 Lis 2012 11:17
    wojtektorr
    Poziom 14  

    Trywialny błąd popełniłem stąd zawsze 0 było w tablicy code. Index zadeklarowałem na początku w petli while(1) :/

    0