Hallo Ich Möchte einen String mit if auf Zeichen untersuchen. Soll heißen im String steht zb A0 oder B1 C2 bla bla Jetzt habe ich versucht dies so auszulesen: Si = A0; ---------------------------- if (Si == 'A0') { --mache was } if (Si == 'B1') { --mache was anderes } ---------------------------- Das Wird auch kompiliert (arduino IDE) ABER Es scheint IMMER True zu sein. So Das A0 und B1 Immer Ausgeführt werden Welche sich Aber Gegenseitig Aufheben. Wo wäre Mein Denkfehler Zusuchen ? Vielen Dank
Du vergleichst einen String mit einem Zeichen. Achte auf die Anführungszeichen auf der rechten Seite des Vergleichs
das geht so nicht, du brauchst eine Funktion wie strcmp oder strncmp
DAVID -. schrieb: > Wo wäre Mein Denkfehler Zusuchen ? 1. Strings werden mit doppelten Hochkommas eingeschlossen, nicht mit einfachen. 2. Strings werden mit strcpy(char *dest, char *src) zugewiesen. 3. Strings werden mit strcmp(char *str1, char *str2) verglichen. 4. Du verwendest Strings wo es anders einfacher geht. > Vielen Dank Bitte
DAVID -. schrieb: > 'A0' ich kein Zeichen. Also eher die Funktion strstr(...) zum Vergleichen nehmen.
Du kannst mit enum aussagekräftige Namen verwenden und trotzdem mit == vergeleichen. Vielleicht brauchst du die Strings gar nicht?
1 | enum{A0, A1, A2} pin; |
2 | |
3 | pin =A0; |
4 | |
5 | switch(pin){ |
6 | case A0: puts("A0"); |
7 | break; |
8 | case A1: puts("A1"); |
9 | break; |
10 | case A2: puts("A3"); |
11 | break; |
12 | default:
|
13 | puts("Fehler"); |
14 | }
|
Nur der vollständigkeitshalber: Es geht nur um EINEN String welcher sich natürlich Ändert. Dieser kommt vom seriellen Port (Tut aber nix zur Sache). Und muss nur mit 2 Zeichen abgeglichen werden. Hat auch Gar nix mit Irgendwelchen A. Pins zu Tuhen. Die Zeichen einzeln Auszuwerten hat sich Als zu Fehlerbehaftet erwiesen. Danke Euch mal Sehen ob Ich Mit strcmp oder strncmp Weiter Komme.
Zwei poplige Zeichen könntest du natürlich auch mit zwei Vergleichen ((a[0] == b[0]) && (a[1] == b[1])) abfertigen.
Klausi Häufchen-Einlauf schrieb: > Zwei poplige Zeichen könntest du natürlich auch mit zwei Vergleichen > ((a[0] == b[0]) && (a[1] == b[1])) abfertigen. Naja, eher sowas wie a[0] != 0 && a[1] != 0 && b[0] != 0 && b[1] != 0 && a[2] == 0 && b[2] == 0 && a[0] == b[0] && a[1] == b[1] Ist das jetzt toller als "!strcmp(a, b)"? Ich denke nicht ...
:
Bearbeitet durch User
Wird mal wieder Zeit für ein gutes C Buch. Der Arduino ist von der Hardware einfach. Aber darauf läuft immer noch C++. Und das ist seit den 80er gleich kompliziert geblieben.
DAVID -. schrieb: > Das Wird auch kompiliert (arduino IDE) Dann schalte die Warnungen vom Compiler an. Der sagt dir, dass er so ein Konstrukt merkwürdig findet. Schalte ruhig alle Warnungen an und behebe die Ursache für die Warnungen. (Behandele sie wie Fehler)
Wenn die Arduino-Umgebung verwendet wird, kann natürlich die String-Klasse verwendet werden, und die wiederum hat den == -Operator entsprechend überladen.
1 | String text; |
2 | |
3 | text = "blabla"; |
4 | |
5 | if (text == "blabla") |
6 | {
|
7 | // etc.pp.
|
8 | }
|
Der Code des Threadstarters muss also nur mit den korrekten Anführungzeichen geschrieben werden und funktioniert, sofern die Variable "Si" vom Typ String ist. Ist "Si" allerdings ein char-Array, dann funktionieren die Vergleiche nicht. https://www.arduino.cc/en/Tutorial/StringComparisonOperators
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.