Forum: Mikrocontroller und Digitale Elektronik Mit Arduino per IF abfrage Mehrere Buchstaben abfragen


von Hacker (Gast)


Lesenswert?

Hallo, ich möchte mit einem Arduino eine Char per IF Abfrage
gleichzeitig ein paar Buchstaben abfragen, Nämlich diese:
qwertzuiopü+asdfghjklöä#<yxcvbnm,.-1234567890ßQWERTZUIOPÜASDFGHJKLÖÄYXCV 
BNM;:_'*!"§$%&/()=?
Wie schaffe ich es diese Buchstaben gleichzeitig abzufragen?
Vielen Dank für die Hilfe

von public (Gast)


Lesenswert?

Dein name spricht bände...

Jetzt aber mal im ernst, was willst du machen?

Du weisst schon wie eine "If-Abfrage" aussieht?

Beste grüsse
Public

von Hacker (Gast)


Lesenswert?

Ja, das weiß ich ich möchte aber nicht:
if (Msg==A {
abfragen, sondern so:
if (Msg==A,B,C,D,E) {

wie kann ich das machen?

von Kristallkugel (Gast)


Lesenswert?

Vielleicht so etwas?
1
char a = 'x';
2
char b[] = "qwertzuiopü+asdfghjklöä#<yxcvbnm,.-1234567890ßQWERTZUIOPÜASDFGHJKLÖÄYXCVBNM;:_'*!\"§$%&/()=?";
3
4
if (strstr(b,a)) {
5
   printf("'%c' ist im Buchstabensalat enthalten\n",a);
6
}

von Max H. (hartl192)


Lesenswert?

Hacker schrieb:
> Wie schaffe ich es diese Buchstaben gleichzeitig abzufragen?
Wenn du wissen willst ob es einer dieser ist:
http://www.cplusplus.com/reference/cstring/strchr/

von Kristallkugel (Gast)


Lesenswert?

Sorry, ich meinte strchr. Mit strstr müsste es heißen:
1
char a[] = "x";
2
...

von Max H. (hartl192)


Lesenswert?

Wenn du prüfen willst ob es ein druckbares Zeichen ist könnte auch das 
hier helfen:
http://www.cplusplus.com/reference/cctype/isprint/

von Hacker (Gast)


Lesenswert?

Vielen dank für die antworten!
leider kann ich die Codes mit meinem arduino nicht nutzen.
gibt es einen Befehl für den arduino?

Und nein ich baue KEINEN key sniffer der die eingaben auf
Richtigkeit überprüft ;)

von Max H. (hartl192)


Lesenswert?

Hacker schrieb:
> leider kann ich die Codes mit meinem arduino nicht nutzen.
Weiso nicht?
string.h bzw. ctype.h includiert?

: Bearbeitet durch User
von Hacker (Gast)


Lesenswert?

OK, das werde ich mal versuchen.
Ich brauche eine schleife,
die IMMER einen Buchstaben abgleicht,
und wenn der Buchstabe der Zeichen entspricht,
soll er den Buchstaben in einem anderen String speichern,
Also so:

   Be    i  s  p  i  e   l
ZU:
Beispiel








>Und nein ich baue KEINEN key sniffer der die eingaben auf
>Richtigkeit überprüft ;)
Das würde ich doch niee machen

von public (Gast)


Lesenswert?

Hehe,

If ((char == a) || (char == b) || (char == c) || usw.)
{
Code
}

Wenn in char ein zeichen steht...

aber bibliotheken einbinden die das schon können sollte eigentlich kein 
problem sein, mit anderen worten

Mach was max sagt ;)

von Max H. (hartl192)


Lesenswert?

Hacker schrieb:
> Ich brauche eine schleife,
> die IMMER einen Buchstaben abgleicht,
> und wenn der Buchstabe der Zeichen entspricht,
> soll er den Buchstaben in einem anderen String speichern,

Dann sollte die isgraph Funktion das richtie für dich sein
http://www.cplusplus.com/reference/cctype/isgraph/
1
  while(*to_check)
2
  {
3
    if(isgraph(*to_check))
4
    {
5
      *to_write++ = *to_check;
6
      *to_write='\0';
7
    }
8
    to_check++;
9
  }
oder sonst das isgraph durch das strchr ersetzen wenn ich alle 
graphischen Zeichen kopiert werden sollen.

public schrieb:
> If ((char == a) || (char == b) || (char == c) || usw.)
Aber bitte nicht die Hochkommas vergessen.
1
(char == 'a')...

: Bearbeitet durch User
von Hacker (Gast)


Lesenswert?

Max H., ich finde deine Vorschläge gut,
aber ich weiß nicht wie ich das mit dem string dann mache.
könntest du mir einen kleinen Code erstellen mit der Funktion?

von user (Gast)


Lesenswert?

und das hier

If ((x >= 'a') && (x <= 'z'))

naja funktioniert bei ASCII, bei EBCDIC nicht (wirst du auch nicht 
haben)

von H. Linux (Gast)


Lesenswert?

>If ((x >= 'a') && (x <= 'z'))
Funktioniert auch  A-Z na ja, wie kann ich dann die anderen zeichen 
abfragen?

von Dussel (Gast)


Lesenswert?

user schrieb:
> naja funktioniert […] bei EBCDIC nicht
Warum nicht? Laut Wikipedia liegen bei EDBDIC 500 A bis I zwischen 0xC1 
und 0xC9. Es ist zwar mehr Aufwand als bei ASCII, aber immer noch weit 
weniger, als jedes Zeichen abzufragen.

von Max H. (hartl192)


Lesenswert?

H. Linux schrieb:
> wie kann ich dann die anderen zeichen
> abfragen?
1
if(x >= '0' && x <= '9')
2
3
if(strchr("<dieAnderenZeichen>", x))
4
5
//oder einzeln
6
if( x == '#' || x == '?' ||  x == '$' || ... )

: Bearbeitet durch User
von Sebastian S. (amateur)


Lesenswert?

Möglichkeit_1: Praktisch nicht wartbar
if (( Zeichen == 33) ||
    ((Zeichen >= 35) && (Zeichen <= 42)) ||
    ((Zeichen >= 44) && (Zeichen <= 61)) ||
     (Zeichen == 63) ||
    ((Zeichen >= 65) && (Zeichen <= 90)) ||
     (Zeichen == 95) ||
    ((Zeichen >= 97) && (Zeichen <= 122))||
     (Zeichen == 167)||
     (Zeichen == 196)||
     (Zeichen == 214)||
     (Zeichen == 220)||
     (Zeichen == 223)||
     (Zeichen == 228)||
     (Zeichen == 246)||
     (Zeichen == 252) )
     ...

Möglichkeit_2: In Funktion

int GuckMal ( char Zeichen ) {
  const char Liste [] = "qwertzuiopü+asdfghjklöä#<yxcvbnm,.-1234567890" 
+
                        "ßQWERTZUIOPÜASDFGHJKLÖÄYXCVBNM;:_'*!"§$%&/()=?";
  int Zaehler;

  for ( Zaehler = 0; Zaehler < 90; ++Zaehler ) {
    if ( Zeichen == Liste [ Zaehler ] ) return 1;
  return 0;
}

von Sebastian S. (amateur)


Lesenswert?

Ich sehe grad, dass ich etwas sparsam mit den Klammern "}" umgegangen 
bin.

von H. Linux (Gast)


Lesenswert?

Danke! genau das habe ich gesucht!

von lächler (Gast)


Lesenswert?

Hacker schrieb:
>>Und nein ich baue KEINEN key sniffer der die eingaben auf
>>Richtigkeit überprüft ;)
> Das würde ich doch niee machen

Bestimmt nicht. Du würdest es nicht nur nie machen, du würdest es 
offenbar auch nicht mal können.

Hacker schrieb:
> könntest du mir einen kleinen Code erstellen mit der Funktion?

Da hat ein Scriptkiddie wohl noch nicht die richtigen Quellen gefunden 
;-)

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.