Problem mit Code



  • Guten Tag ich habe ein Problem mit diesem Codeschnipsel:

    string PasswortInput()
    {
        char CurrentKey[1];
        char Word[100];
        int a = 0;
        bool Ende = false;
    
        while(!Ende)
        {
            if(kbhit())
            {
                CurrentKey[0] = getch();
                switch (CurrentKey[0])
                {
                    case 0x0D:
                        Ende = true;
                        break;
                    case 0x08:
                        cout <<  "\b \b";
                        Word[a--] = 0; // Wie kann ich hier das Zeichen "löschen"?
                        break;
                    default:
                        cout << "*";
                        Word[a] = CurrentKey[0];
                        a++;
                        break;
                }
            }
        }
        string endInput(Word);
    
        return(endInput);
    }
    

    Und zwar bekomm ich manchmal als Rückgabewert das korrekte Wort und manchmal das Wort mit Sonderzeichen am Schluss. Zum Test hab ich "asd" eingegeben und das kam auch so zurück. Dann hab ich das Programm nochmal neu gestartet und wieder "asd" eingegeben und bekam dann "asd" mit Sonderzeichen zurück. Weiß einer wieso? Und wie kann ich, wenn Backspace gedrückt wurde, das letzte Zeichen löschen? (Stelle ist im Code markiert)

    Danke Schonmal im Voraus.



  • Nepp schrieb:

    [code]
    ...
    case 0x0D:
    Ende = true;
    break;
    case 0x08:
    ...

    Du musst das char array noch terminieren

    // machen alle 3 das selbe
    Word[a] = '\0';
    Word[a] = 0x00;
    Word[a] = 0;
    

    oder du füllst das array gleich mit 0.

    char Word[100];
    memset (Word, 0x00, sizeof (Word));
    

    Nepp schrieb:

    [code]
    case 0x08:
    cout << "\b \b";
    Word[a--] = 0; // Wie kann ich hier das Zeichen "löschen"?
    break;

    Könntest z.B.:

    case 0x08:
      cout <<  "\b \b";
      a--;
      Word[a] = 0;
      // Word[--a] = 0; wenn ich nicht falsch liege sollte das auch gehen (aber ned mein stil ;) )
      break;
    

    Aber dazu sollte man noch sagen, wenn du schon C++ progst nimm std::string

    Keros



  • Also danke, jetzt funktioniert es und auch das mit dem Löschen geht. Ja ich versuch schon immer std::string zu verwenden, aber wie wäre das im obigen Code möglich? Das hat er nämlich nicht geschluckt:

    string str;
    str.c_str() = getch();
    

    Ich bin leider noch Anfänger, also erbitte ich um Nachsicht.


Anmelden zum Antworten