Abfragen in Abhängigkeit Ausgeben



  • Hallo zusammen,
    ich bin C++ Neuling, also bitte nicht auseinandernehmen.

    Ich habe ein Programmcode, welches insgesamt 5 Abfragen stellt. Z.B:

    - Wie alt bist Du?
    - Wie lautet Dein Name?
    - Wie lautet Deine PLZ?
    - Wie gross bist Du?

    Mein Problem: Wenn der User sein Alter eingegeben hat folgt sofort im Anschluss alle 3 Fragen aufeinmal. Ich bekomme das nicht hin, dass die nächsten Fragen einzeln dem User gestellt werden. Habt ihr ne Idee?

    #include <iostream>
    using namespace std;
    
    int main ()
    {
        char Namen, Konfession;
        int Alter;
        float Gehalt;
    
        cout << "Geben Sie Namen ein: ";
        cin >> Namen;
        cout << "\n";
    
        if (Namen == true) {
        cout << "Geben Sie Ihre Konfession an: ";
        cin >> Konfession;
        cout << "\n";
        cout << "\n";
        }
    
        if (Konfession = true) {
            cout << "Geben Sie Ihr Alter ein: ";
            cin >> Alter;
            cout << "\n";
            cout << "\n";
        }
    
        if (Alter = true) {
            cout << "Geben Sie Ihr Gehalt an: ";
            cin >> Gehalt;;
            cout << "\n";
            cout << "\n";
        }
    
        return 0;
    }
    

    Danke für eure Mühe schonmal.

    VG


  • Mod

    Das liegt daran, dass char ein einzelnes Zeichen ist. Wenn du einen Namen (aus mehreren Zeichen) eingibst, dann wird davon nur das erste genommen, wenn du ein Zeichen einliest. Entsprechend kann dann die zweite Frage direkt mit dem zweiten verbliebenen Zeichen des Namens beantwortet werden (da du wieder nur einen einzelnen char liest) und die dritte und vierte Frage schlagen einfach fehl, da dort Zahlen gelesen werden, aber die verbliebenen Zeichen des Namens gefunden werden.

    Nimm mal std::string (Header: string) als Datentyp für Zeichenketten.

    float ist der wohl denkbar ungeeignetste Datentyp für eine Geldmenge. Nimm wenigstens eine Ganzzahl. Das ist zwar auch nicht optimal, aber allemal besser als ein (quasi-)kontinuierlicher Datentyp für eine diskrete Größe.

    Es ist ja sehr löblich, dass du in deinem ersten Beitrag versucht hast, die Code-Tags zu benutzen 👍 , aber du musst sie auch wieder zumachen, damit sie wirken. Schreib dazu [/code] am Ende des Programmcodes (oder benutz den passenden Button im Editfenster unter den Smileys). Als registrierter Forennutzer kannst du deinen Beitrag nachträglich bearbeiten und dies korrigieren.



  • SeppJ schrieb:

    Nimm wenigstens eine Ganzzahl. Das ist zwar auch nicht optimal

    Was ist dann ein optimaler Datentyp für eine Geldmenge?


  • Mod

    out schrieb:

    SeppJ schrieb:

    Nimm wenigstens eine Ganzzahl. Das ist zwar auch nicht optimal

    Was ist dann ein optimaler Datentyp für eine Geldmenge?

    Ein nutzerdefinierter Datentyp mit den passenden Eigenschaften. Da ich kein Finanzler bin, kann ich dir nicht sagen, was diese Eigenschaften genau sein sollten, aber das float nicht passt ist offensichtlich. Ich würde daher darauf vertrauen, dass die zahlreichen Geldbibliotheken wissen, was sie tun. Zumindest die professionellen. Irgendeiner Geldklasse von einem gelangweilten Studenten würde ich nicht nehmen. Intels Dezimalzahlbibliothek brüstet sich damit, für Finanzoperationen optimiert zu sein.



  • Für Geldoperationen nimmt man eine Basiseinheit und gibt alle Beträge als Vielfaches dieser aus.

    Das gab es hier schon einmal. Anscheinend waren Cent viel zu groß.

    Daher wäre eine geeignete Basiseinheit vielleicht 10510^{-5} Cent.

    Und dann, wie SeppJ schon sagte, einfach einen uint64_t wrappen, der den Betrag als Vielfaches von einem hunderttausendstel Cent speichert. Bei der Ausgabe kann man dann ja einfach was wurschteln, dass es wie eine Fließkommazahl aussieht.



  • Sone schrieb:

    Anscheinend waren Cent viel zu groß.

    Wieso sind Cent viel zu groß? Mit was kleinerem rechnet man doch in der Regel nicht? (OK, Benzinpreise, aber dann nimmt halt ein 10tel Cent).


  • Mod

    Aber erfüllt das alle Gesetze und Normen? Bloß weil es als eine sinnvolle Lösung erscheinen mag, ist es nicht richtig. Finanzleute und Rechtsanwälte verstehen weder Spaß noch Binärsysteme. Wenn die Anwendung sich in 100 Jahren auch nur um einen Millicent verrechnet, dann wirst du in Grund und Boden verklagt.

    Zumindest bei professionellen Anwendungen.

    Für Hobbyanwendungen ist dein Vorschlag sicherlich gut genug (und float ist eben nicht gut genug). Daher fällt er in die Kategorie "Geldklasse von einem gelangweilten Studenten". Sicherlich praxistauglich, aber würde ich nicht drauf vertrauen.

    Nathan schrieb:

    Sone schrieb:

    Anscheinend waren Cent viel zu groß.

    Wieso sind Cent viel zu groß? Mit was kleinerem rechnet man doch in der Regel nicht? (OK, Benzinpreise, aber dann nimmt halt ein 10tel Cent).

    Doch, man braucht andauernd kleinere Einheiten. Wie viele Zinsen sind denn 2.35% p.a. von 71.42 Euro, wenn ich sie 371 Tage anlege? In der Finanzbranche kommen oft krumme Zahlen vor. Daher würde ich mich da lieber genau kundig machen, bevor ich eine naive Lösung benutze.



  • ...und deshalb mag ich keine Finanzleute.



  • Hallo SeppJ,
    vielen Dank für den tollen Tipp. Funktioniert. 😃

    SeppJ schrieb:

    Das liegt daran, dass char ein einzelnes Zeichen ist. Wenn du einen Namen (aus mehreren Zeichen) eingibst, dann wird davon nur das erste genommen, wenn du ein Zeichen einliest. Entsprechend kann dann die zweite Frage direkt mit dem zweiten verbliebenen Zeichen des Namens beantwortet werden (da du wieder nur einen einzelnen char liest) und die dritte und vierte Frage schlagen einfach fehl, da dort Zahlen gelesen werden, aber die verbliebenen Zeichen des Namens gefunden werden.

    Nimm mal std::string (Header: string) als Datentyp für Zeichenketten.

    float ist der wohl denkbar ungeeignetste Datentyp für eine Geldmenge. Nimm wenigstens eine Ganzzahl. Das ist zwar auch nicht optimal, aber allemal besser als ein (quasi-)kontinuierlicher Datentyp für eine diskrete Größe.

    Es ist ja sehr löblich, dass du in deinem ersten Beitrag versucht hast, die Code-Tags zu benutzen 👍 , aber du musst sie auch wieder zumachen, damit sie wirken. Schreib dazu [/code] am Ende des Programmcodes (oder benutz den passenden Button im Editfenster unter den Smileys). Als registrierter Forennutzer kannst du deinen Beitrag nachträglich bearbeiten und dies korrigieren.



  • Sicherlich praxistauglich, aber würde ich nicht drauf vertrauen.

    Nein, ich auch nicht. 😮
    Das war nur ein auf die schnelle gefundene Möglichkeit. Warte mal kurz.


  • Mod

    Sone schrieb:

    Warte mal kurz.

    Ich glaube, wenn du es richtig haben möchtest, brauchst du so etwas wie eine dezimale Fließkommazahl. Das ist schon einiger Aufwand. Schönerweise reicht es ja, diesen Aufwand nur einmal zu betreiben, danach kann es jeder benutzen.



  • Neh, ich verschwende jetzt meinen Abend damit, eine kleine Geld-Lib zu schreiben. Bis morgen Früh stell ich mal die erste Version hoch. 😃



  • Ihr habt lustige Vorstellungen darüber, was in einer Bank passiert. *kopfschüttel*



  • seldon schrieb:

    Ihr habt lustige Vorstellungen darüber, was in einer Bank passiert. *kopfschüttel*

    Erzähl. 🙂



  • Btw, erste Code-Schnipsel funktionieren. Sowas in der Richtung muss mit:

    DEFINE_CURRENCY(Euro, "Euro")
    DEFINE_CURRENCY(USDollar, "US-Dollar") 
    
    DEFINE_CURRENCY_RELATION(Euro, USDollar, 1.34) // Wert zur Laufzeit veränderbar
    

    Edit: :'D



  • https://github.com/bingojamigo/Money-Lib/tree/master/Money Lib

    So die erste, schnell vollendete Version.



  • ...



  • Warum eigentlich nicht .hpp und .cpp als Endung? Ist zumindest weiter verbreitet 😉



  • ...



  • |\|1C#7 1337 63|\|_|6!

    👍

    Swordfish schrieb:

    http://de.wikipedia.org/wiki/Vollkommenheit ...

    Ach Swordfish, das war doch erst der Anfang.

    Nexus schrieb:

    Warum eigentlich nicht .hpp und .cpp als Endung? Ist zumindest weiter verbreitet 😉

    Aber uncool. Hört sich an wie h pups pups und c pups pups 😃
    Edit: Neh, es kennzeichnet die von mir erstellten Header und Sources. Die von anderen sind dann ja eben anders.

    Edit: Und "konstruktive" Kritik gibt es nicht? 😃


Log in to reply