Forum: Compiler & IDEs if abfragen von 2 Zeichen sorgt für Verwirrung.


von DAVID B. (bastler-david)


Lesenswert?

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

von STK500-Besitzer (Gast)


Lesenswert?

Du vergleichst einen String mit einem Zeichen. Achte auf die 
Anführungszeichen auf der rechten Seite des Vergleichs

von Sven B. (scummos)


Lesenswert?

das geht so nicht, du brauchst eine Funktion wie strcmp oder strncmp

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

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

von zitter_ned_aso (Gast)


Lesenswert?

DAVID -. schrieb:
> 'A0'

ich kein Zeichen.

Also eher die Funktion strstr(...) zum Vergleichen nehmen.

von zitter_ned_aso (Gast)


Lesenswert?

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
     }

von DAVID B. (bastler-david)


Lesenswert?

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.

von Klausi Häufchen-Einlauf (Gast)


Lesenswert?

Zwei poplige Zeichen könntest du natürlich auch mit zwei Vergleichen 
((a[0] == b[0]) && (a[1] == b[1])) abfertigen.

von Sven B. (scummos)


Lesenswert?

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
von PittyJ (Gast)


Lesenswert?

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.

von Dirk B. (dirkb2)


Lesenswert?

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)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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