Forum: Mikrocontroller und Digitale Elektronik Codevergleichen


von stefan (Gast)


Lesenswert?

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?

von Icke M. (Firma: my-solution) (hendi)


Lesenswert?

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.

von stefan (Gast)


Lesenswert?

ich glaube diese Funktion gibt es nur in C++

von Magnus Müller (Gast)


Lesenswert?

...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

von stefan (Gast)


Lesenswert?

Dann müsste ich aber beide felder mit demselben wert initialisieren, und 
hätte das selbe problem.

von Ralph (Gast)


Lesenswert?

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.

von Icke M. (Firma: my-solution) (hendi)


Lesenswert?

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.

von Tom (Gast)


Lesenswert?

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.

von Michael K. (mmike)


Lesenswert?

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
Noch kein Account? Hier anmelden.