Erstes Programm - Verbesserungsvorschläge?



  • Das mit dem String kommt von daher dass ich anfangs einen Fehler mit Char-Arrays gemacht habe. Ich habe eben versucht alle Buchstaben in Anführungszeichen zu stecken, was mir allerdings einen Fehler ausgab. Habe mich nun noch einmal dazu belesen und rausgefunden wie ein Char-Array funktioniert.

    Danke auch schon führ die ganzen Tipps 😉



  • D4RKS0UL23 schrieb:

    Habe mich nun noch einmal dazu belesen und rausgefunden wie ein Char-Array funktioniert.

    Kann er dann nicht gleich seine char-Arrays so füllen?

    std::string index, pruef; //strings sind eigentlich char-Arrays
        char letter, letterpruef;
    
        for (int i=0; i<26; i++) //Anzahl Buchstaben vom Alphabet
        {
            index.push_back(char(65+i)); //füllen ab 'A'
            pruef.push_back(char(97+i)); //füllen ab 'a'
    
        }
    
      letter = index.at(a);
      letterpruef = pruef.at(a);
    

    (uh, 5-mal bearbeitet :D)



  • lemon03 schrieb:

    D4RKS0UL23 schrieb:

    Habe mich nun noch einmal dazu belesen und rausgefunden wie ein Char-Array funktioniert.

    Kann er dann nicht gleich seine char-Arrays so füllen?

    std::string index, pruef; //strings sind eigentlich char-Arrays
        char letter, letterpruef;
    
        for (int i=0; i<26; i++) //Anzahl Buchstaben vom Alphabet
        {
            index.push_back(char(65+i)); //füllen ab 'A'
            pruef.push_back(char(97+i)); //füllen ab 'a'
    
        }
    
      letter = index.at(a);
      letterpruef = pruef.at(a);
    

    (uh, 5-mal bearbeitet :D)

    Naja ein char array sah bei mir immer so:

    char var [27] = "abcdefghijklmnopqrstuvwxyz"
    

    Es sind aus irgendeinem grund 27 Zeichen (Das 27. zeichen ist ein sehr komisches)


  • Mod

    jb schrieb:

    Wie verändert man den Zeichensatz? (Quellcode-Datei in ein anderes Format konvertieren?) Hast Du ein Beispiel, wann ich gezielt den Zeichensatz ändern möchte?

    Ich bezog mich auf den Zeichensatz, den das hier gezeigte Programm unterstützt. Vielleicht möchte der Autor später auch mal Ziffern und Sonderzeichen als Elemente des Spiels haben.

    D4RKS0UL23 schrieb:

    Naja ein char array sah bei mir immer so:

    char var [27] = "abcdefghijklmnopqrstuvwxyz"
    

    Es sind aus irgendeinem grund 27 Zeichen (Das 27. zeichen ist ein sehr komisches)

    Das letzte Zeichen ist ein verstecktes Nullzeichen. Das hat etwas mit den historischen Wurzeln von C++ zu tun. Genauer damit, wie in der Sprache C Zeichenketten behandelt werden. Kann hier einfach ignoriert werden. Falls es dich interessiert (und es kann in Fällen wie hier schließlich auch in C++ mal relevant werden):
    https://en.wikipedia.org/wiki/Null-terminated_string



  • D4RKS0UL23 schrieb:

    Naja ein char array sah bei mir immer so:

    char var [27] = "abcdefghijklmnopqrstuvwxyz"
    

    Es sind aus irgendeinem grund 27 Zeichen (Das 27. zeichen ist ein sehr komisches)

    Dann würde ich es aber wenigstens so

    std::string var = "abcdefghijklmnopqrstuvwxyz";
    

    schreiben.

    Oder gibt es hier einen speziellen Grund für char[], den ich gerade nicht sehe?


  • Mod

    lemon03 schrieb:

    Oder gibt es hier einen speziellen Grund für char[], den ich gerade nicht sehe?

    Umgekehrt: Gibt es einen speziellen Grund für string ? Wenn nicht, warum dynamische Speicherallokation?



  • Mmh ... gute Frage 😉

    Wenn ich albern wäre, würde ich jetzt antworten, weil es moderner aussieht 😃 Aber sonst hätte ich jetzt keine Begründung ...



  • jb schrieb:

    Beim drüber fliegen. Das da ist unnötig.

    string index[26] = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
    

    Es geht etwas eleganter:

    char letterB = 'A' + 1; // B
    char letterC = 'A' + 2; // C
    

    __jb__ schreibt Unfug wiedermal. 💡



  • volkard schrieb:

    __jb__ schreibt Unfug wiedermal. 💡

    Hallo volkard,
    ich fände es wünschenswert, wenn man hier auch mal nicht immer nur schreibt "Unfug" oder "Schwachsinn" sondern das Ganze auch mal kurz begründet. Mir reicht auch ein Link zu dem passenden Thema. Das sollte denke ich ja drin sein, oder nicht?
    Viele Grüße,
    Jakob

    SeppJ schrieb:

    jb schrieb:

    Wie verändert man den Zeichensatz? (Quellcode-Datei in ein anderes Format konvertieren?) Hast Du ein Beispiel, wann ich gezielt den Zeichensatz ändern möchte?

    Ich bezog mich auf den Zeichensatz, den das hier gezeigte Programm unterstützt. Vielleicht möchte der Autor später auch mal Ziffern und Sonderzeichen als Elemente des Spiels haben.

    Danke für die Erklärung.



  • jb schrieb:

    volkard schrieb:

    __jb__ schreibt Unfug wiedermal. 💡

    Hallo volkard,
    ich fände es wünschenswert, wenn man hier auch mal nicht immer nur schreibt "Unfug" oder "Schwachsinn" sondern das Ganze auch mal kurz begründet. Mir reicht auch ein Link zu dem passenden Thema. Das sollte denke ich ja drin sein, oder nicht?
    Viele Grüße,
    Jakob

    Schwachsinn.

    Ich bin in aller Ausführlichkeit und sogar mit Links auf ALLE Deine Argumente eingegangen, die Du angegeben hast, warum Dein Vorschlag eleganter sein sollte: nämlich gar keine.
    Und so prima ausgearbeitet war der Vorschlag eh nicht. Sonst hättest Du bemerkt, daß er zerbröselt. Die Doppeltheit der Liste ist doch das einzige Problem, und die würde schon von alleine wegfliegen, wenn Du den Code anfangen würdest aufzuhübschen. Wieso soll ich mir zehnmal mehr Arbeit machen als Du?

    Ich erwarte, daß weniger Unfug gepostet wird. Und falls doch, erlaube ich mir, gelegentlich aufzuzeigen.

    Auch erwarte ich von Fragestellern, daß sie den Code hier im Forum posten und nicht bei einem Drittanbieter, und daß die Mods den Code nachtragen.



  • volkard, da der "__jb__ schreibt Unfug wiedermal" Beitrag der erste von dir in diesem Thread ist. Gehe ich stark davon aus, dass Du einen anderen Beitrag von mir und Thread meinst. Außer du hast hier noch einen Post unter einem anderen Nick eingebracht!? Ja, ich sehe das auch so, dass du in den anderen Threads immer fachlich und professionell auf meine (Gegen-)Fragen geantwortet oder Argumentionen reagiert hast, finde ich auch total super 👍 👍 👍



  • lemon03 schrieb:

    Kann er dann nicht gleich seine char-Arrays so füllen?

    std::string index, pruef; //strings sind eigentlich char-Arrays
        char letter, letterpruef;
    
        for (int i=0; i<26; i++) //Anzahl Buchstaben vom Alphabet
        {
            index.push_back(char(65+i)); //füllen ab 'A'
            pruef.push_back(char(97+i)); //füllen ab 'a'
    
        }
    
      letter = index.at(a);
      letterpruef = pruef.at(a);
    

    (uh, 5-mal bearbeitet :D)

    Selten sinnvoll. So ein

    char alphabet[]="abcdefghijklmnopqrstuvwxyz0123456789.-,";
    

    steht auch bei mir normalerweise drin. Passwortgenerator, Bruteforcer, Dateinamengeneratur…
    Ich will später eh das Alphabet ändern können, so wie D4RKS0UL23 später das Spiel anpassen will, um zum Beispiel die Tasten auf der Grundlinie "asdfghjklöä#" schneller blind zu finden und immer mal wieder eine Taste dazunehmen mag.
    Ausnahme ist rot13, da benutze ich zum Initialisieren eine Schleife über alle Buchstaben.



  • lemon03 schrieb:

    Oder gibt es hier einen speziellen Grund für char[], den ich gerade nicht sehe?

    Der spezielle Grund ist, dass später ja überprüft wird ob der getippte Buchstabe korrekt ist.

    Zu beginn wird eine Zufallszahl von 0-25 generiert; die Zahl ist im int a gespeichert. Wenn die Zahl steht schaut das Programm im char-array an position a, und speichert den Buchstaben an der Position (a = 0 -> A, a = 1 -> B usw.)

    Wenn nun eine Taste getippt wurde, nimmt das Programm diese Taste und speichert sie in einer char-Variable. Danach schaut er im 2. Array (pruef), wieder an position a, ob der getippte buchstabe mit dem im Arraay übereinstimmt. Wenn ja dann gibt's Punkte, wenn nicht, dann nicht.

    Ich wüsste nicht wie sich soetwas einfach nur mit

    string pruef = "abcdefghijklmnopqrstuvwxyz";
    

    realisieren lässt.


  • Mod

    D4RKS0UL23 schrieb:

    Ich wüsste nicht wie sich soetwas einfach nur mit

    string pruef = "abcdefghijklmnopqrstuvwxyz";
    

    realisieren lässt.

    Exakt genau so? Ich verstehe zwar die Beschreibung deines Vorhabens nicht, aber ein String verhält sich doch so wie ein char-Array mit Extras. Alles was du mit char-Arrays machen kannst, geht genau so (und zwar wirklich genau auf die gleiche Art und Weise) mit string.


Anmelden zum Antworten