C++ Problem





  • #include <iostream>
        using namespace std;
    
    int main()
    {
        cout<<"Bitte geben Sie eine Zahl ein";
        int  a;
        cin>>a;
        cout<<"Die Zahl ist " << a << endl;
    
        getchar(); // wartet bis der Anwender ein Taste drückt
    }
    

    Gruß

    2²



  • btw... meines Erachtens nach, sagt er dir, wenn du "5" drückst "die Zahl ist 5". "Er" ( wer auch immer dieser abstrakte er ist, DER Konsole oder DER Programm könnens ja nicht sein ) "sagt" das Ganze nur so schnell, dass du es nicht siehst, aber " er sagt " es 🤡



  • ist jetzt nicht unbedingt die direkte anwort auf deine Frage, aber ich glaube das eine switch anweisung besser wäre, da ich finde das diese else if einen verwirrt...

    int main()
    {
    cout<<"Bitte geben Sie eine Zahl ein\n";
    int  a;
    cin>>a;
    switch(a)
    {
         case 1: cout<<"Die Zahl ist" << a << "\n";break;
         case 2: cout<<"Die Zahl ist" << a << "\n";break;
         case 3: cout<<"Die Zahl ist" << a << "\n";break;
         case 4: cout<<"Die Zahl ist" << a << "\n";break;
         case 5: cout<<"Die Zahl ist" << a << "\n";break;
         case 6: cout<<"Die Zahl ist" << a << "\n";break;
         case 7: cout<<"Die Zahl ist" << a << "\n";break;
         case 8: cout<<"Die Zahl ist" << a << "\n";break;
         case 9: cout<<"Die Zahl ist" << a << "\n";break;
         case 10: cout<<"Die Zahl ist" << a << "\n";break;
         default: cout << "Du hast eine Falsche eingabe, oder eine eingabe über 10 gemacht\n";
    }
    system("PAUSE"); //dies sollte dein Problem mit dem direkten beenden des Programms lösen
    }
    

    Wenn du deinen code aber unverändert lassen möchtest... füge einfach nach deinen ganzen else if....

    system("PAUSE");
    

    ein... das hat bei mir dieses Problem sehr praktisch gelöst...

    PS: Wenn ich falsch liege korrigiert mich, aber die switch anweisung ist doch eigtl wesentlich effizienter oder??



  • Jud4s schrieb:

    PS: Wenn ich falsch liege korrigiert mich, aber die switch anweisung ist doch eigtl wesentlich effizienter oder??

    Als das hier nicht :p

    2² schrieb:

    cout<<"Die Zahl ist " << a << endl;



  • Jud4s schrieb:
    PS: Wenn ich falsch liege korrigiert mich, aber die switch anweisung ist doch eigtl wesentlich effizienter oder??

    Als das hier nicht :p

    ??Warum... finde meine idee mit dem switch wesentlich übersichtlicher 😉



  • Jud4s schrieb:

    int main()
    {
    cout<<"Bitte geben Sie eine Zahl ein\n";
    int  a;
    cin>>a;
    switch(a)
    {
         case 1: cout<<"Die Zahl ist" << a << "\n";break;
         case 2: cout<<"Die Zahl ist" << a << "\n";break;
         case 3: cout<<"Die Zahl ist" << a << "\n";break;
         case 4: cout<<"Die Zahl ist" << a << "\n";break;
         case 5: cout<<"Die Zahl ist" << a << "\n";break;
         case 6: cout<<"Die Zahl ist" << a << "\n";break;
         case 7: cout<<"Die Zahl ist" << a << "\n";break;
         case 8: cout<<"Die Zahl ist" << a << "\n";break;
         case 9: cout<<"Die Zahl ist" << a << "\n";break;
         case 10: cout<<"Die Zahl ist" << a << "\n";break;
         default: cout << "Du hast eine Falsche eingabe, oder eine eingabe über 10 gemacht\n";
    }
    system("PAUSE"); //dies sollte dein Problem mit dem direkten beenden des Programms lösen
    }
    

    *lach*
    nicht dein ernst, oder? ^^

    Es ist zwar effizienter als das Eingangsbeispiel, aber im Grunde führst du nur 10mal den exakt gleichen Befehl aus.

    ein (in Zahlen: 1) simpler cout reicht in dem Fall bei weitem aus (und vermeidet unnötige Redundanz)



  • Hihi... ja es ist der gleiche nur, ihc meine das eingangsbeispiel ist doch auch das gleiche nur das ich stadt dessen ich bei den couts statt die Zahl von anfang an zu definieren einfach die Variable ausgebe.... aber gut du hast recht es ist fehleranfälliger... aber ich mag es lieber wenn es wenig Klammern gibt 😉 :p



  • sieh dir deinen code an:
    gebe ich "1" ein, so lautet die ausgabe "Die Zahl ist1".
    dir fehlt also ein leerzeichen. was machst du nun? du musst den code insgesamt an zehn stellen ändern, nämlich bei jedem case ...: und überall ein leerzeichen eingeben.
    das ist ineffizient.

    hättest du code wie folgenden gehabt:

    unsigned int a;
    cin >> a;
    
    if (a <= 10)
    {
       cout << "Die Zahl ist" << a << '\n';
    }
    else
    {
       cout << "Fehler: Eingabe darf nicht größer als 10 sein.\n";
    }
    

    dann müsstest du den code nur an einer stelle ändern.

    /edit: jaja, die deutsche satzstellung...



  • unsigned int a = 0;
    std::cin >> a;
    
    std::cout << "Die Zahl ist " << ( a > 10 ? "fehlerhaft": std::stringstream( a ).str() ) << std::endl;
    

    is untested 🙂



  • @queer_boy
    Bei deinem Code wird aber auch die 0 akzeptiert. 😛



  • Rubber les das hier mal:

    http://www.lerneniminternet.de/htm/c++/probe.html

    Da wird es erklärt.

    Ich bin mir ganz sicher viele Leute hier in diesem Forum könnten die innerhalb von 10 min die richtige Antwort posten.

    Aber irgendwie macht das hier keiner dir werden eigentlich nur hinweise gegeben wie du es machen könntest.

    Ich find das manchmal etwas blöd.

    Weil wenn man an einer Sache schon wer weiss wie lange dran sitzt und es einfach net hinbekommt dann macht es auch irgendwann kein spass mehr.

    Dann wäre man schon froh über eine Antwort.^^

    Warum ich dir keine direkte Antwort geben: Weil ich auch net auf anhieb weiss wie es geht^^

    Aber viele hier im Forum wüssten es da bin ich mir ganz sicher.

    naja hf & gl :>



  • std::stringstream hat nen Konstruktor der nicht für std::string ist? Naja ... mein nicht 😉

    unsigned int value(0);
    std::cin >> value;
    
    std::cout << "Die Zahl ist ";
    if (value < 0 || value > 10)
        std::cout <<  "fehlerhaft!\n";
    else 
        std::cout << value << std::endl;
    


  • Haha... Dachte schon auf der letzten Seite, was es da noch gross was am Code zu ändern gibt, nachdem

    cout << "Die Zahl ist" << a << '\n';
    

    geschrieben worden ist.. - Und jetzt diese Disskusion. 😃



  • (D)Evil schrieb:

    std::stringstream hat nen Konstruktor der nicht für std::string ist? Naja ... mein nicht 😉

    unsigned int value(0);
    std::cin >> value;
    
    std::cout << "Die Zahl ist ";
    if (value < 0 || value > 10)
        std::cout <<  "fehlerhaft!\n";
    else 
        std::cout << value << std::endl;
    

    Es müsste value <= 0 heißen. :p



  • (D)Evil schrieb:

    std::stringstream hat nen Konstruktor der nicht für std::string ist? Naja ... mein nicht 😉

    Nö, aber so ähnlich geht es:

    std::cout << "Die Zahl ist " << (a > 10 ? "fehlerhaft" : static_cast<std::stringstream&>(std::stringstream() << a).str()) << std::endl;
    

    Nicht, dass ich sowas empfehlen würde. 😉



  • wo ist der kotz-smilie?



  • Hmm nee eigtl. != 0 😉 Denn unsigned kann nicht negativ sein 😃 Sorry 😉


Anmelden zum Antworten