Wie kann ich Strings mit "ODER" Vergleichen



  • Ich brauche folgendes:

    Eingabe eines Strings;

    Wenn der Eingegebene String nicht "A" oder "B" oder "C" oder "10" oder "9" Entspricht -> Ausgabe ungültige eingabe

    sonst weiter mim Programm. das schaut so aus, nur das ich das mit dem oder nicht auf die Reihe bekomme:

    while (strcmp(s, "A"||"B"||"C"||"10"||"9")!=0) //Solange Bis richtig eingegeben
    {
    printf("Geben Sie A,B,C,10 oder 9 ein");
    scanf("%s",s);
    
    if (strcmp(s, "A"||"B"||"C"||"10"||"9")==0) {printf ("Ungültige eingabe");
    }
    ..
    


  • In C++ hätte ich jetzt std::find (oder std::setstd::string) in den Raum geworfen. In C mußt du das mit einem Array und einer Schleife selber umsetzen.



  • Wie könnte das den aussehen?

    in etwa so:

    while (1!=2)
    {
    scanf("%s",s);
    
    if(strcmp(s, "A")!=0) printf("ungültig");
    else if(strcmp(s, "B")!=0) printf("ungültig");
    else if(strcmp(s, "C")!=0) printf("ungültig");
    else if(strcmp(s, "10")!=0) printf("ungültig");
    else if(strcmp(s, "9")!=0) printf("ungültig");
    else break;
    }
    

    oder wie war das gemeint??



  • Simon Bader schrieb:

    while (1!=2)
    

    😃



  • Du musst alle einzeln vergleichen.

    if (!strcmp(s, "A") || !strcmp(s, "B") || !strcmp(s, "C") || !strcmp(s, "10") || !strcmp(s, "9"))
    {
      // s ist "A", "B", "C", "10" oder "9"
    }
    


  • Nein, nicht wirklich - damit wäre jede Eingabe ungültig.

    Ein Ansatz wäre so etwas:

    char* vergleich[] = { "A", "B", "C", "10", "9" };
    int anzahl = sizeof(vergleich)/sizeof(vergleich[0]);
    int gefunden = 0;
    
    for(int i=0;i<anzahl;++i)
      if(strcmp(eingabe,vergleich[i])==0) gefunden=1;
    
    if(!gefunden)
      printf("ungültig");
    


  • @cooky

    Juhu so gehts danke!



  • while( printf("Geben Sie A,B,C,10 oder 9 ein"), scanf("%[^\n]",s), getchar(), strcmp(s,"A")|strcmp(s,"B")|strcmp(s,"C")|strcmp(s,"10")|strcmp(s,"9") )
     printf ("Ungültige eingabe");
    

Anmelden zum Antworten