Eingabe mit Werten aus Array vergleichen.



  • Wie schreibe ich die Schleife da am besten?
    In dem Array können die Buchstaben varrieren, also in der einen Runde sind 3 Buchstaben und in der anderen 10 drinnen.
    Gibt es eine "allgemeine" Lösung?



  • wildtobias schrieb:

    Gibt es eine "allgemeine" Lösung?

    int istBuchstabeInWort(const char *wort, const char buchstabe)
    {
        while(wort)
        {
            if(*wort == buchstabe)
                return 1;
            ++wort;
        }
    
        return 0;
    }
    
    int main()
    {
        ...
        if(!istBuchstabeInWort(wortwahl, buchstabe))
        {
            //Buchstabe ist nicht im Wort enthalten
            ...
        }
        ...
    }
    

    Edit: Eine vergessene Klammer nachgetragen



  • Belli schrieb:

    int istBuchstabeInWort(const char *wort, const char buchstabe)
    {
    /* ... */
        while(wort)
        {
            /* ... */
        }
    
        /* ... */
    }
    /* ... */
    

    Das sollte man für Anfänger der Deutlichkeitshalber vielleicht eher so schreiben:

    int istBuchstabeInWort(const char *wort, const char buchstabe)
    {
    /* ... */
        while(wort != NULL)
        {
            /* ... */
        }
    
        /* ... */
    }
    /* ... */
    


  • Steffo schrieb:

    Belli schrieb:

    int istBuchstabeInWort(const char *wort, const char buchstabe)
    {
    /* ... */
        while(wort)
        {
            /* ... */
        }
    
        /* ... */
    }
    /* ... */
    
    int istBuchstabeInWort(const char *wort, const char buchstabe)
    {
    /* ... */
        while(wort != NULL)
        {
            /* ... */
        }
    
        /* ... */
    }
    /* ... */
    

    Ist beides falsch.
    Muss in etwa so aussehen:

    int istBuchstabeInWort(const char *wort, const char buchstabe)
    {
    /* ... */
      if( wort )
        while(*wort)
        {
            /* ... */
        }
    
        /* ... */
    }
    

    oder für Anfänger

    int istBuchstabeInWort(const char *wort, const char buchstabe)
    {
    /* ... */
      if( wort!=NULL )
        while(*wort != '\0')
        {
            /* ... */
        }
    
        /* ... */
    }
    


  • Wutz schrieb:

    Ist beides falsch.

    Schei..., hast natürlich recht ... an einen Nullzeiger habe ich nicht gedacht, aber auf jeden Fall muss es natürlich

    while(*wort)
    

    heißen!



  • danke für die vielen Antworten. Leider kann ich nur bedingt etwas damit anfangen.

    int istBuchstabeInWort(const char *wort, const char buchstabe)

    *wort gibt einen Pointer an, aber was genau macht/ist ein Pointer?
    wozu "const" vor char?

    Wo in meinem Programm kann ich das wie einbinden? Also ab wann sucht er im Array nach passenden Buchstaben?
    Sorry für die vielen Fragen aber ich lerne grade C und stehe noch am Anfang.



  • wildtobias schrieb:

    int istBuchstabeInWort(const char *wort, const char buchstabe)

    *wort gibt einen Pointer an, aber was genau macht/ist ein Pointer?

    Ein Pointer zeigt auf eine Adresse. In diesem Fall auf dein Array. Man kann Pointer auch hochzählen, dadurch kann man z. B. die Indizes des Arrays durchlaufen.

    wozu "const" vor char?

    Const steht für Konstante. Damit verhindert man, dass versehentlich Änderungen an den Variablen vorgenommen werden. Außerdem kann der Compiler noch Optimierungen vornehmen, wenn er weiss, dass sich ein Wert nicht ändert (Caching).

    Wo in meinem Programm kann ich das wie einbinden?

    Du musst erst mal ganz oben nach den header-includes deine Funktion definieren:

    int istBuchstabeInWort(const char *wort, const char buchstabe);
    

    Dann kannst du die Funktion beispielsweise nach der main-Funktion einfügen.

    Also ab wann sucht er im Array nach passenden Buchstaben?

    Ab dem nullten Index.

    L. G.
    Steffo



  • wildtobias schrieb:

    Sorry für die vielen Fragen aber ich lerne grade C und stehe noch am Anfang.

    Wie/Wo lernst du denn C?

    Mach dir mal klar was char wortwahl[15]; bedeutet.

    Du musst deine gefundenen Buchstaben auch irgendwo eintragen, damit du weißt, wann das Wort gefunden wurde.



  • @DirkB
    Ich lerne C in der Schule (12 klasse). Bis jetzt hatten wir im Informatikunterricht keine Pro. Sprache gelernt.

    char wortwahl [15]; Bedeutet, dass ein Array mit Platz für 14 Werten vom Typ Character initialisiert wird.

    Das mit dem Buchstaben kommt nocht. Zuerst soll das Programm erkennen ob der Buchstabe stimmt oder nicht.



  • wildtobias schrieb:

    char wortwahl [15]; Bedeutet, dass ein Array mit Platz für 14 Werten vom Typ Character initialisiert wird.

    Falsch geraten.

    char wortwahl [15];
    

    Definiert ein Array für 15 char-Elemente.
    Mit außerhalb von Codeblöcken (implizit) oder innerhalb (explizit) vorgegebener Speicherklasse static wird auch initialisiert, sonst nicht.


Anmelden zum Antworten