Hallo, ich bin daran mti C ein Codeschloss zu programmieren. leider habe ich keine gute idee, wie ich den Code der in einem Feld (datentyp umsigned char) gespeichert ist mit dem Code der eingegeben wird verglichen werden kann. die funktion, die ich geschrieben taugt nichts: for(z=0;z<20;z++) // Feldlänge 20 { if(Zahl[z]!=Code[z]) { Fehler=1; break; } } da jedes feld mit null initialisiert ist, würde der eingegebene Code auch stimmen, wenn man gar nichts eingeben würde. meine idee wäre das: for(c=0;c<=20;c++) { if(Feld[c]==0) break; } da die Ziffer null als 10 abgespeichert wird, wüsste man, wieviele stellen man eingegeben hätte und könnte überprüfen, ob man gleichviele stellen eingegeben hätte wie abgespeichert wären. Kennt jemand vielleicht eine besser funktion?
Hm, so fit bin ich auch noch nicht, aber schau dir mal memcmp an, da kann man, wenn ich das richtig verstanden hab zwei Zeiger übergeben und die dann vergleichen.
...dann prüf halt ob vorher ein Code eingegeben (sprich: ein paar Tasten gedrückt) wurde. Du kannst aber dein Array auch vor der Codeeingabe selbst initialisieren (sinnvollerweise mit Werten, die nicht deinem Code entsprechen). Gruß, Magnetus
Dann müsste ich aber beide felder mit demselben wert initialisieren, und hätte das selbe problem.
Das eine Feld ist ja die Vorgabe auf die vergleihcen wird, hier initialisierst du mit dem Wert den du als schlüssel benutzen willst. Das zweite Feld ist der eingebenen Code. Diese Feld füllst du mit den Tasteneingaben und zählst dabei die Ziffern mit. Nur dann wenn die geforderte Anzahl an Ziffern eingegeben ist, springst du zum Vergleich der beiden Felder. Sind beide Felde gleich, so ist der richtige Code eingegeben. Zum Vergleichen kannst die einfache For Schleife aus deinem ersten Posting verwenden.
Also memcpy gibts auch für C, aber ob das deine Funktion erfüllt weiß ich nich. Liegt in der string.h gibts auch als strcpy.
Also entweder initialisierst Du die Felder unterschielich, so dass unbenutzte Elemente nicht als gleich erkannt werden oder Du zählst bei der Eingabe mit, oder versuchst sonst wie rauszukriegen, wie lang der Code ist, und dann vergleichst Du nur die echte Länge. Guck mal, wie strings abgespeichert sind: Entweder das erste Element enthält die Länge (wie in Pascal) oder hinter dem letzten Element kommt eine NUL, die in gültigen Strings nicht vorkommen darf. Kannst ja Dein Feld wie einen string organisieren, dann ist es einfach, die Länge rauszukriegen.
Hier mal ein Beispiel mit nem 10er array: uint8_t Code[10] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0}; uint8_t InputBuffer[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; Jetzt schiebst Du bei jedem Tastendruck den gedrückten Wert in den InputBuffer und shiftest die Anderen Werte immer um eins nach rechts also wenn Taste gedrückt: for (i = 9; i > 0; i--) InputBuffer[i + 1] = InputBuffer[i]; InputBuffer[0] = "Gedrückte Taste"; Und dann vergleichst Du einfach die beiden Arrays Elementweise. Wenn Sie gleich sind ist der Code richtig eingegeben worden ..... Grüße, Michael
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.