C++ While Fehler



  • Was ist ein Default-Konstruktor?

    jo eingabe ist jetzt raus.

    while(konto.kontostand > 20000.00 && konto.kontostand > 0)
    	{
    		cout << "So viel Geld haben Sie nicht. Bitte geben Sie eine neue Summe ein: " ;
    		cin >> konto.kontostand;
    		getchar();
    	}
    

    wäre das dann die richtige while Schleife?

    warum sollte ich das getchar weglassen? dann würde das programm ja abbrechen, oder?



  • Mach doch gleich lieber sowas:

    #include <iostream>
    #include <string>
    
    struct konto
    {
        std::string name;
        unsigned kontonummer;
        float kontostand;//Man könnte auch ein int nehmen, und in Cent rechnen
    
        konto():
        name("Unbekannt")//Konstruktor für name wird aufgerufen;
        {
            kontonummer = 0;
            kontostand = 0; //Kein Startguthaben ;)
        }
    };
    
    int main()
    {
        using std::cout;//Kannst in diesem Beispiel auch ganz normal using namespace std; verwenden,
        using std::cin;//einige sagen aber, man soll einzelne Bezeichner (Namen für variablen,Funktionen,Klassen) einzeln inmportieren um namenskonflikte zu vermeiden.
    
        konto Konto;
    
        cout << "Herzlich Willkommen bei dem Kontoverwalter !\n\n"
                 "Ihr Name: ";
        std::getline(cin, Konto.name);
    
        cout << "\nWunschkontonummer: ";
        cin >> Konto.kontonummer;
    
        cout << "\nWieviel wollen sie einlegen? (max. 20000, min 1): ";
        cin >> Konto.kontostand;
    
        while(Konto.kontostand > 20000.00 || Konto.kontostand <= 0)
        {
            cout << "Die Summe liegt außerhalb des g\201ltigen Wertebereichs. Bitte geben Sie eine neue Summe ein: " ;
            cin >> Konto.kontostand;
        }
    
        cout << "\nKonto ("<< Konto.kontonummer <<") wurde mit "<< Konto.kontostand <<" Euro auf den Namen "<< Konto.name << " erstellt !\n";
    
        cin.ignore();
        cin.get();//Guck dir solche Sachen umbedingt nochmal an, das ist jetzt nur flüchtig eine Lösung
    }
    

    In diesem Fall ist vielleicht auch empfehlenswert, eine Abfrage bei den Eingaben einzubauen, um
    Fehlern vorzubeugen.

    Edit: Das Problem war garnicht die while-Schleife.
    Sag mal, wie lernst du eigentlich? Buch, Tutorial, etc.?



  • _matze schrieb:

    Hacker schrieb:

    Außerdem heißt es main() statt _tmain(), und char* statt _TCHAR*.

    Nö, _tmain ist schon ok (VC++).

    Wozu compilerabhängig programmieren? _tmain wird ohnehin zu main bzw wmain aufgelöst, je nachdem ob _UNICODE gesetzt ist.
    Als absoluter Anfänger sollte man sich das MS-Zeugs erst garnicht gewöhnen - das kann man später immernoch nutzen.



  • ULLLIIK schrieb:

    warum sollte ich das getchar weglassen? dann würde das programm ja abbrechen, oder?

    Und das ist gut so. Denn man Konsolenprogramme allgemein auch aus Scripts raus starten können.

    Du startest das Programm aus der IDE aus einfach mit Strg+F5 statt nur mit F5, dann wird die Konsole von der IDE aufgehalten.



  • @Hacker: mit diesem Quellcode kann ich leider noch wenig anfangen. außerdem gibt er bei mir einige Errors. also ist dieses kleine Programm nicht so leicht programmierbar wie ich gedacht habe? weil ich bin ja noch am basics lernen.

    @volkard: ah danke

    PS: gehört jetzt nicht hier zum Topic, aber welche C++ Lernbücher sind denn empfehlenswert? gibts einen Thread?

    MfG



  • ULLLIIK schrieb:

    PS: gehört jetzt nicht hier zum Topic, aber welche C++ Lernbücher sind denn empfehlenswert? gibts einen Thread?

    Empfehlung: C++ Primer oder Der C++ Programmierer
    Link: http://www.c-plusplus.net/forum/251551



  • ULLLIIK schrieb:

    @Hacker: mit diesem Quellcode kann ich leider noch wenig anfangen. außerdem gibt er bei mir einige Errors.

    Hmmm... ? Kenn mich gar nicht mit Visual C++ aus, bei mir kompiliert und funktioniert es allerdings problemlos.

    Edit²: Hier is es jetz richtig.



  • @Hacker: Man kann ein bisschen erkennen, dass du was dazugelernt hast, dennoch sind mir da viele Sachen aufgefallen.

    1)Wenn du schon eine Initialisierungsliste verwendest, dann bitte auch für alle Member, wenn möglich. Im Falle der Kontonummer ist das sogar erforderlich.
    2)Wenn schon float, dann vergleiche auch bitte mit float-Literalen.
    3)Der Name einer Person kann sich sehr wohl ändern. Denke nur mal an transsexuelle. Du schließt diese Gruppe von Menschen von der Benutzung des Programms aus. Das findet PI nicht besonders nett.
    4)Wieso initialisierst du den Namen mit "Unbekannt"? Völlig unnötig.

    Stilmäßig:
    5)PI findet const nach dem Datentypen viel schöner, weil PI von rechts nach links liest.
    6)PI findet es komisch, dass Hacker die Klasse "konto" nennt und die Instanz "Konto". PI fände es schöner, wenn Hacker das entweder umgekehrt machte, oder die Instanz z.B. "k", "ko" oder "knt" nannte.
    7)PI mag deine Art zu kommentieren nicht. PI findet sowohl vor, als auch nach den zwei Slahes einen Abstand schöner.
    8)PI hat bemerkt, dass Hacker schon wieder das 'ü' unter Zuhilfenahme einer Escape-Sequenz ausgegeben hat. PI mag Konstanten lieber.
    9)PI findet es unschön, dass du bei der letzten Ausgabe Abstände gespart hast.
    10)PI findet es doof, dass du dem Benutzer nicht erlauben willst, 0 Euro einzulegen oder im Einlegevorgang etwas abzuheben.

    Und natürlich: Hör auf zu plenken !



  • Hab ein paar Fehler schon vor dir erkannt und verbessert.
    Natürlich sind die Konstanten nicht mal Kompilierbar. Der Name wird hier ja nach dem Aufruf des D.Konstruktors initialisiert.
    Hacker findet alle Kommentare zum Stil etwas abgehackt:

    5. Du liest von rechts nach links? Krank. Ich finde das const dahinter eigentlich auch schöner, da man erkennt das der Wert der Variablen Konstant bleibt. const dahinter liest sich, so denkt Hacker, besser.
    2. Versteht Hacker nicht. Macht das überhaupt einen Unterschied (wenn ich 'Literale' richtig versteh) ?
    4.Soll ich ihn "Transsexueller Behinderter" nennen ? Oder (jetz ernst gemeint) "Kein Name vorhanden"?

    Dazu möchte der Hacker noch an die für ihn und PI erstellte Spielwiese erinnern.



  • Wohl eher verschlechtbessert.



  • lieber doch main schrieb:

    _matze schrieb:

    Hacker schrieb:

    Außerdem heißt es main() statt _tmain(), und char* statt _TCHAR*.

    Nö, _tmain ist schon ok (VC++).

    Wozu compilerabhängig programmieren? _tmain wird ohnehin zu main bzw wmain aufgelöst, je nachdem ob _UNICODE gesetzt ist.
    Als absoluter Anfänger sollte man sich das MS-Zeugs erst garnicht gewöhnen - das kann man später immernoch nutzen.

    Gegen so eine Erklärung wie deine habe ich nichts (ich benutze übrigens auch nie _tmain). Aber Hackers Beitrag hörte sich so an, als sei es ein Fehler (es heißt main statt _tmain!), und das ist es nicht.

    Btw, ich glaube, vielen Anfängern und auch vielen Fortgeschrittenen ist Unabhängigkeit vom Compiler, vom OS usw. ziemlich egal. Viele schießen sich auf ein System ein und bleiben für eine ganze Weile dabei. Und dann ist es wirklich nicht tragisch, die eine oder andere compilerspezifische Erweiterung zu nutzen (kann ja durchaus von Vorteil sein).



  • EDIT: Hat sich erledigt.



  • Jonas OSDever schrieb:

    Hacker schrieb:

    ULLLIIK schrieb:

    @Hacker: mit diesem Quellcode kann ich leider noch wenig anfangen. außerdem gibt er bei mir einige Errors.

    Hmmm... ? Kenn mich gar nicht mit Visual C++ aus, bei mir kompiliert und funktioniert es allerdings problemlos.

    Edit²: Hier is es jetz richtig.

    Visual C++ (genauer VS 2010 Prof.) frisst es anstandslos...
    @ULLLIIK: Poste mal die Fehlermeldungen.

    Ne, das waren Fehlermeldungen vor den Edits am QuellCode, der war vorher klar falsch.



  • Achso, Sorry...



  • Hacker schrieb:

    5. Du liest von rechts nach links? Krank.

    Ich find es auch durchaus sinnvoll, von rechts nach links zu lesen. Oder wie fasst du z.B. das in Worte, wenn du von links nach rechts ließt?

    int*** p;
    

    edit: @Hacker ok 🙂



  • _matze schrieb:

    lieber doch main schrieb:

    _matze schrieb:

    Hacker schrieb:

    Außerdem heißt es main() statt _tmain(), und char* statt _TCHAR*.

    Nö, _tmain ist schon ok (VC++).

    Wozu compilerabhängig programmieren? _tmain wird ohnehin zu main bzw wmain aufgelöst, je nachdem ob _UNICODE gesetzt ist.
    Als absoluter Anfänger sollte man sich das MS-Zeugs erst garnicht gewöhnen - das kann man später immernoch nutzen.

    Gegen so eine Erklärung wie deine habe ich nichts (ich benutze übrigens auch nie _tmain). Aber Hackers Beitrag hörte sich so an, als sei es ein Fehler (es heißt main statt _tmain!), und das ist es nicht.

    Nope, ich wusst ja nicht, dass es bei VisualC++ genutzt werden kann.

    Edit: @Gugelmoser, das ist jetzt absolut non-Topic (und dazu noch Geschmacksache). Lassen wirs.



  • Hacker schrieb:

    5. Du liest von rechts nach links? Krank.

    Ich lese Datentypen von rechts nach links 😉

    Hacker schrieb:

    2. Versteht Hacker nicht. Macht das überhaupt einen Unterschied (wenn ich 'Literale' richtig versteh) ?

    Für das Programm macht das wohl keinen Unterschied. Ich finde es aber "korrekter".

    Hacker schrieb:

    4.Soll ich ihn "Transsexueller Behinderter" nennen ? Oder (jetz ernst gemeint) "Kein Name vorhanden"?

    Gibt auch Leute, die sich umtaufen lassen, wenn dir das besser gefällt.



  • Aber wie soll er jetzt den Default-Namen nennnen ?



  • Eigentlich würd ich es ja wirklich logischer finden, wenn Kontonummer und Name konstant wären. IRL wird ja auch von Anfang an festgelegt, wie diese Sachen heißen.

    @PI: Du liest datentypen von rechts nach links?

    tni, taolf, elbuod, rotcev, testib. Hört sich nach viel spaß an 🕶

    2,3&4 deiner Punkte gehören also noch zum Stilistischen.



  • Ich iteriere Gedanklich mit einem token_reverse_iterator über die Datentypen.


Anmelden zum Antworten