C: Eingabe auf Vorkommen in einer definierten Menge prüfen

N

Naphaneal

unregistriert
Thread Starter
Dabei seit
05.12.2007
Beiträge
4.085
Reaktionspunkte
343
hi!

gibt es in C die möglichkeit eine eingabe, so auf ihre gültigkeit zu prüfen:

WHILE (getchar() != {'n','N','E', 'e', })

also das ein eingelesenes zeichen mit seinem (nicht-)vorkommen einer menge verglichen wird?

greez

Naph
 
Code:
char c;
while ((c = getchar()) != EOF) {

  if (c == 'n' || c == 'N'.......) 
    break;

  <do something>; 

}

so in etwa?

Auf Mengen prüfen als "is in" geht nicht.
 
ja, genau so dachte ich müsste man das machen. aber ich hatte auf ne abkürzung gehofft... :D
 
Eine Variante wäre vielleicht:

strchr( "nNeE", c )

Wenn NULL zurückkommt, ist das Zeichen nicht enthalten.
 
das würde aber voraussetzen, daß ich einen string eingebe, was nicht der fall ist.

ich wollte ein kleines programm schreiben, das für das RMS scheduling die einzellast, die gesamtlast, die untere schranke und die priorität ermittelt bzw. den user fragt, was er gerne hätte.

und als eingabe soll der entsprechende buchstabe getippt werden, aber die abfrage solange wiederholt werden, wie der input nicht den vorgegebenen zeichen entspricht.
 
Code:
while (true) {
  printf("eingabe: ");
  char c = getchar();

  switch (c) {

  case 'n':
    <do n>;
    break;
  case 'N':
    ...

  default:
    printf("unbekannte eingabe"); 
    continue;
  }
}

nur so als idee...

merke: der code sollte in erster linie das tun was du willst, nicht was du nicht willst. das sollte in der entsprechenden fehlerbehandlung abgearbeitet werden.
 
das würde aber voraussetzen, daß ich einen string eingebe, was nicht der fall ist.

Nein, strchr sucht einen einzelnen Buchstaben in einer Menge von Buchstaben. Also genau das was du gefragt hast. (Aber was du willst, ist switch/case, s.o. bei _ebm_).
 
Code:
while (true) {
  printf("eingabe: ");
  char c = getchar();

  switch (c) {

  case 'n':
    <do n>;
    break;
  case 'N':
    ...

  default:
    printf("unbekannte eingabe"); 
    continue;
  }
}

nur so als idee...

merke: der code sollte in erster linie das tun was du willst, nicht was du nicht willst. das sollte in der entsprechenden fehlerbehandlung abgearbeitet werden.

hmm...ja, stimmt. so könnte man das tun...wieso komm ich da nich drauf? :kopfkratz:

@dannycool

laut manpages erwartet strchr als parameter einen string, in dem er sucht.

folgendes beispiel:
an der shell steht:
Code:
"Wollen Sie (E)inzellast, (G)esamtlast, (U)ntere Schranke oder (P)iorität berechen?"

als eingabe wird erwartet: e,E,g,G, ...

also immer nur ein zeichen...

ich dachte, daß es evtl eine möglichkeit gäbe, direkt bei der eingabe das eingegebene zeichen mit einer menge M={e,E,...} als erlaubten zeichen zu vergleichen und dann entsprechend zu verzweigen bzw. die eingabe neu abzufragen.

also quasi: while(n=getchar() != {e,E,...}) printf("Eingabe: "); else <do something completely different.>
 
Du willst einen Character in einem String suchen, der genau aus den erlaubten Chars besteht. ;)

Insofern tut strchr genau das. Aber wie gesagt, das ist die kompliziertere Herangehensweise.
 
ah...ok...dann hab ich das falsch verstanden...
 
Zurück
Oben Unten