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.
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?
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 | }
|
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 | }
|
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.
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?
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.