Codevergleichen

Gast #649597
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?
Gast #649616
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
Gast #649682
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.
Gast #649687
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.
#649902
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren