c++ Compiler mit zeitgemäßer GUI?



  • Schade...
    Aber besser erstmal verzichten, als von Anfang an Fehler zu machen. Das ist wohl einzusehen 😉
    Danke für den Hinweis.



  • Ich nochmal...
    Es passt hier vom Forum her zwar nicht rein, aber bevor ich wegen meiner Anfängerfrage einen neuen Thread eröffne, nutze ich lieber den hier nochmal.

    Ich wollte jetzt einfach mal ein bisschen mit C++ rumspielen und habe mich dann entschlossen, ein Programm zu schreiben, das die Länge eines eingegebenen Strings bestimmt.
    Mein Ansatz sah folgendermaßen aus:

    int main()
    {
    unsigned short zaehler = 0;
    char string[100];
    cout << "Bitte Text eingeben\n";
    cin >> string;
    while (1)
    {
    if (string[zaehler]!='/0')
    zaehler++;
    else break;
    }
    cout << zaehler;
    return 0;
    }

    Wo ist mein Fehler?
    Wenn ich mir den Ablauf angucke, sieht das für mich so aus:
    1. ich erstelle eine Zählvariable mit dem Wert 0
    2. ich erstelle einen String mit max. 100 Zeichen
    3. ich gebe die Meldung "Bitte Test eingeben" aus und springe in die nächste Zeile
    4. ich weise string einen Text zu, den ich an dieser Stelle eingebe
    5. ich überprüfe, ob sich an der von zaehler angegebenen Stelle das Schlusszeichen des Strings befindet
    -wenn ja, gebe ich zaehler aus
    -wenn nicht, erhöhe ich zaehler um 1 und überprüfe dann erneut auf das Schlusszeichen...

    Wenn ich string das Wort "hallo" zuweise, müsste das doch so aussehen:
    Inhalt des Strings: h a l l o /0 .......
    Index: 0 1 2 3 4 5 .......
    Die Schleife sollte also bei zaehler=5 erkennen, dass sich dort das Schlusszeichen befindet und dann break durchführen.
    Das funktioniert aber nicht...
    Das Programm hängt sich stattdessen auf.
    Woran liegt das, was habe ich falsch verstanden/gemacht?



  • Es heißt '\0'. Mit Backslash. Wie bei '\n' und allen anderen Escape-Sequenzen. Schalte mal die Warnungen bei deinem Compiler ein, dann meldet er sowas eigentlich.

    BTW läßt sich die Schleife ein wenig eleganter schreiben:

    while (string[zaehler] != '\0')
      ++zaehler;
    


  • Mhhh stimmt...
    Wo man es so liest, macht es fast Sinn 😉
    Danke für die schnelle Hilfe...



  • Mist, jetzt kann ich den alten Beitrag nicht mehr editieren 🙄
    Wenn sich in dem String ein Leerzeichen befindet, verlässt er die Schleife aber ebenfalls...
    Sollte es nicht einen Unterschied zwischen "/0" und " " geben?



  • Nein, der String hört nicht bei einem Leerzeichen auf ... aber der Extraktionsoperator von cin tut das. D.h. wenn du Hallo Welt<ENTER> eingibst, enthält der String nur "Hallo", während der Rest im Eingabepuffer von cin verbleibt und bei der nächsten Eingabeoperation eingelesen wird.

    Ganze Zeilen kann man mit getline einlesen.



  • Für schnelle GUI Erfolge ist wohl der Borland C++ Builder 6 unschlagbar.
    Nur für einen Schüler wohl etwas zu teuer.
    Mal abgesehen davon, das dich dragdrop builden nicht näher an C++ führt ....



  • Bashar schrieb:

    Es heißt '\0'. Mit Backslash. Wie bei '\n' und allen anderen Escape-Sequenzen. Schalte mal die Warnungen bei deinem Compiler ein, dann meldet er sowas eigentlich.

    BTW läßt sich die Schleife ein wenig eleganter schreiben:

    while (string[zaehler] != '\0')
      ++zaehler;
    
    while (string[zaehler++] != '\0');
    

    wobei ich mir nicht ganz sicher bin, ob die ++ vor oder nach dem "zaehler" hinmüssen.





  • Ja, oder

    while (string[zaehler++]);
    

    aber wenn man nicht gerade mit seinen l33t sk1llz angeben will, läßt man das besser sein 😉


Anmelden zum Antworten