Forum: Mikrocontroller und Digitale Elektronik 2 Arrays miteinander vergleichen


von Nino K. (lnino)


Angehängte Dateien:

Lesenswert?

Hi an alle,

versuche gerade diese zuerst angenommene leichte Aufgabe zu bewältigen, 
aber ich nun komme ich absolut nicht weiter.

Ich möchte überprüfen ob 2 Arrays identisch sind.
Falls ja, soll die Zahl 7 an der 7 Segment Anzeige erscheinen.
Falls nein, soll die Zahl 8 an der 7 Segment Anzeige erscheinen.

Irgendetwas scheint aber mit der if Bedingung nicht zu stimmen. Denn es 
wird immer in den If Zweig gesprungen und die 7 angezeigt, egal ob in 
einem der beiden Arrays eine Zahl ändere oder nicht.

Weiß hier jemand von euch weiter? Viele Dank.

Die Werte der 7 Segment anzeige stimmen. Habe dies nochmal überprüft für 
den Fall, dass ich bei 8 und 7 die selben LEDs aktiviert habe. :-)

Mein Codebeispiel habe ich angehängt.

von Christoph H. (christoph_b)


Lesenswert?

schau dich hier mal um.

Beitrag "Arrays Vergleichen"

von Nino K. (lnino)


Angehängte Dateien:

Lesenswert?

Hi,

danke für den Link.

Habe es nun mit 2 Varianten daraus versucht, aber beide haben den 
gleichen Effekt. Es wird immer nur die Zahl 7 auf der 7 Segment Anzeige 
angezeigt. Selbst wenn ich eine Zahl im Array ändere.

Anbei meine Quelldateien.
Was mach ich noch falsch?

von Peter II (Gast)


Lesenswert?

for (i=0;i<10;i++){

dein array ist aber nur 5 elemente lang!

von Felix N. (time2ride)


Lesenswert?

Und es vergleich effektiv nur die letzte Zahl...

von Peter II (Gast)


Lesenswert?

aber eigentlich sollte die memcmp sache richtig sein. Da sehen ich 
keinen Fehler.

Sicher das deine Ausgabe für die anzeige richtig gehen?

auf dem PC geht dieser code:
1
int main(void) {
2
3
  // Variables
4
  char u[5] = {1, 2, 3, 4, 6}, v[5] = {1, 2, 3, 4, 5};
5
6
7
  while(1) {
8
9
10
    if (!memcmp(u, v, 5*sizeof(char))){
11
      printf("7\n");
12
    }
13
14
    else{
15
      printf("8\n");
16
    }
17
  }
18
  return 0;
19
}

von Felix N. (time2ride)


Lesenswert?

Könnte gehen:
1
    unsigned char i;
2
    unsigned char sendok;
3
    sendok = 0;
4
    for (i=0;i<sizeof(u);i++){
5
      if (u[i]!= v[i]){
6
        sendok++;
7
      }
8
    }
9
    
10
    if (sendok){
11
      /* Unterschiedlich */
12
    }
13
    
14
    else{
15
      /* Gleich */
16
    }

von Nino K. (lnino)


Angehängte Dateien:

Lesenswert?

Danke für Eure Antworten. Der "Fehler" lag in der Deklaration des 
Arrays. Wobei ich nicht verstehe warum.

Zuerst hatte ich dem Array seine Werte in geschwungenen Klammern 
zugewiesen.(siehe vorherigen Quellcode) Da klappte es nicht. Erst als 
ich die Werte Zeile für Zeile zuwies, waren die Werte auch wirklich im 
Array.

Hätte nämlich versucht die Werte des Arrays in einer for Schleife 
auszugeben und da kam nichts.

Nun gehen alle Varianten die ich probiert habe.

Für alle die damit auch Probleme haben, hänge ich meinen nun 
funktionierenden Code an.

Mich würde aber abschließend noch interessieren, warum das nur mit einer 
meiner Varianten auf meinem MCU (atmega168) funktioniert? Hat hier 
jemand eine Idee? Vielleicht habe ich was falsch gemacht. Möchte 
nächstes Mal nicht wieder in die selbe Falle tappen.

Danke für Eure Unterstützung.

von Cyblord -. (cyblord)


Lesenswert?

C per try & error.... hat was.

von Stefan E. (sternst)


Lesenswert?

El Nino schrieb:
> Zuerst hatte ich dem Array seine Werte in geschwungenen Klammern
> zugewiesen.(siehe vorherigen Quellcode) Da klappte es nicht

El Nino schrieb:
> Mich würde aber abschließend noch interessieren, warum das nur mit einer
> meiner Varianten auf meinem MCU (atmega168) funktioniert? Hat hier
> jemand eine Idee? Vielleicht habe ich was falsch gemacht. Möchte
> nächstes Mal nicht wieder in die selbe Falle tappen.

Eigenes Makefile?

von observer (Gast)


Lesenswert?

cyblord ---- schrieb:
> C per try & error.... hat was.

"Lernen" nennt man das.
Es wäre natürlich zu schön, wenn der Compiler zweckdienliche Hinweise 
von sich geben würde/könnte.

von M. K. (avr-frickler) Benutzerseite


Lesenswert?

El Nino schrieb:
> Zuerst hatte ich dem Array seine Werte in geschwungenen Klammern
> zugewiesen.(siehe vorherigen Quellcode) Da klappte es nicht. Erst als
> ich die Werte Zeile für Zeile zuwies, waren die Werte auch wirklich im
> Array.

Versuche es mal so:
1
char u[] = {1, 2, 3, 4, 6}, v[] = {1, 2, 3, 4, 5};

Wenn du Arrays so intilisierst, legt der Compiler die Länge des Arrays 
selbst fest.

von Karl H. (kbuchegg)


Lesenswert?

observer schrieb:
> cyblord ---- schrieb:
>> C per try & error.... hat was.
>
> "Lernen" nennt man das.

Höchstens das er lernt, das er ein C-Buch braucht.

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.