sinnhaftigkeitsfrage



  • hallo zusammen, ich absoluter-cpp-beginner, also bitte nicht über meine fragen wundern. zu unten eingefügtem code habe ich eine frage. ab zeile 12 bis 28 verstehe ich überhaupt nicht, denn wenn ich diese lösche, erhalte ich das selbe ergebnis, wenn ich diesen befehl drin lasse. kann mir jemand erklären wozu ich diese zeilen 12 bis 28 hier überhaupt noch benötige?

    bitte nicht zuuuuuu kompliziert erklären !! danke

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	int eingabe;
    
    	cout << "1 - Start" << endl;
    	cout << "2 - Info" << endl;
    	cout << "3 - Ende" << endl;
    
    	cin >> eingabe;
    
    	switch(eingabe)
    	{
    	case 1:
    			cout << "2 - Start" << endl;
    			break;
    	case 2:
    			cout << " - Info" << endl;
    			break;
    	case 3:
    			cout << "3 - Ende" << endl;
    
    	default:
    			cout << "Nicht gültig" << endl;
    
    	}
    return 0;
    
    }
    


  • Hi Silkesommer,

    ich versuchs mal:

    Zeilen 8,9 und 10 sagen Dir was Du eingeben kannst. Das heist sie schieben das nach der Standardausgabe cout.

    Zeile 12 liest das von der Standardeingabe cin in die Variable eingabe

    Zeile 14 wertet Deine Eingabe aus und verzweigt wahlweise nach 16, 19, 22 oder bei Falscheingabe nach 25.

    17, 20, 23 schreiben noch mal auf den Bildschirm, was Du eingegeben hast.

    18, 21 beenden jeweils den abgearbeiteten Zweig, da C++ sonst im nächsten Zweig direkt weitermachen würde. Diese break-Anweisung gehört auch hinter zeile 23, da ja danach noch der default-zweig kommt.

    26 gibt wenn nichts von den erlaubten eingegeben wurde eine Fehlermeldung (derzeit auch wenn 3 eingegeben wurde).

    Vermutlich ist aber für Dich des Spaß nach Zeile 12 schon beendet, weil das Programm am Ende nicht halt macht, sondern sich nach Eingabe in Zeile 12 und Ausgabe in Zeile 17, 20 oder 23 sofort wieder beendet.

    Um zu einem vernünftiger arbeitendem Programm zu kommen die Anzeige des eingegebenen Textes ändern, damit Du siehst was die Antwort ist, zum Beispiel durch ändern des Textes von "3 - Ende" in "sie wählten: 3 - Ende".

    Zum anderen, und das ist wichtiger, am Ende anhalten. Das geht am einfachsten, wenn Du nach Zeile 28 noch mal Ziele 12 wiederholst. Du must dann zum Beenden noch mal eine Zahl eingeben.

    Viel Erfolg wünscht Mümmel



  • Also generell gibt es durchaus einen Unterschied ob 12 - 28 vorhanden sind oder ob nicht.

    Aber es wäre vielleicht ganz gut wenn du fragen würdest was du daran nicht
    verstehst. Dann würde sich der Unterschied vielleicht von ganz allen klären.
    Ansonsten kann man nur raten.



  • cout gibt etwas aus. Es wir auf den Bildschirm geschrieben.
    cin erwartet eine eingabe von dir.
    Wenn du etwas eingibst wird switch(eingabe) aufgerufen und der entsprechende Text ausgegeben.
    Wenn du das löscht dann hast du keine Ausgabe Deiner Eingabe.



  • silkesommer schrieb:

    zu unten eingefügtem code habe ich eine frage. ab zeile 12 bis 28 verstehe ich überhaupt nicht, denn wenn ich diese lösche, erhalte ich das selbe ergebnis, wenn ich diesen befehl drin lasse.

    😃 Das ist ja mal die beste Art und Weise "das Fenster schließt sich sofort" auszudrücken, die ich je gelesen habe 😃

    Zur Lösung: Suchfunktion, Konsolenfaq, das Thema kommt quasi täglich hoch 🙂



  • Hi,

    die Sinnhaftigkeitsfrage ergibt sich vermutlich dadurch, daß man spätestens nach Eingabe einer Zahl nichts mehr sieht weil das Programm dann ohne weiteren Halt beendet wird und das Fenster in dems läuft dann wahrscheinlich danach zu gemacht wird.
    Insofern ist die sichtbare Reaktion mit und ohne den Zeilen gleich.

    Gruß Mümmel

    PS: Hat ja geschrieben "absoluter CPP-Beginner", also mal ein bisschen Nachsicht oder wenn wen die Frage stört ignorieren.
    Einfach mal auf den Beitragszähler gucken, das ist der 1. Beitrag, da kann man schon mal nicht perfct sein. Perfection wird erst ab dem 2. erwartet.

    Kann mich noch an meine ersten Lehrgangsstunde (1983) am MOEX-System erinnern, wo von TKB, Linker, Compiler... gesprochen wurde, die Schalter zu kriegen hätten und ich absolut nichts begriffen habe, bis mir dann mal einer gesagt hat, das das alles Programme sind, denen man einen Befehl übergibt.



  • danke @muemmel

    was mir nicht ganz klar war:

    warum erhalte ich ein und die gleiche ausgabe, wenn ich die zeilen 12-28 lösche. mir stellt sich die frage, warum soll ich sie denn überhaupt eingeben?

    gruss



  • silkesommer schrieb:

    danke @muemmel

    was mir nicht ganz klar war:

    warum erhalte ich ein und die gleiche ausgabe, wenn ich die zeilen 12-28 lösche. mir stellt sich die frage, warum soll ich sie denn überhaupt eingeben?

    gruss

    Hallo silkesommer,

    dann hast du die Beiträge von LordJaxom, Unix-Tom, dark-eye und muemmel
    nicht genau genug gelesen.

    Es macht einen Unterschied!

    Was ist denn die Ausgabe von deinem Programm mit 12-28 und ohne diese Zeilen?

    Gruß mcr



  • silkesommer schrieb:

    danke @muemmel

    was mir nicht ganz klar war:

    warum erhalte ich ein und die gleiche ausgabe, wenn ich die zeilen 12-28 lösche. mir stellt sich die frage, warum soll ich sie denn überhaupt eingeben?

    gruss

    Du weißt was eine Konsole ist? Falls nicht: das ist dieses Kommandofenster, oder auch gerne DOS-Fenster genannt. Und diese Konsole/Konsolenfenster schließt sich sofort, nach deiner Tasteneingabe. Natürlich siehst du dann das Ergebnis nicht, weil das Fenster sich ja sofort schließt. Der PC ist natürlich so ultra schnell mit der Darstellung des Ergebnisses, und dem Schließen des Fensters, das du das garnicht sehen kannst.

    Starte doch mal dein Programm aus der Konsole heraus! (aber das müssen wir dir wahrscheinlich auch noch erklären?)

    Was für eine IDE benutzt Du denn? VisualC++? Falls ja, dann starte dein Programm doch mit STRG+F5 und nicht mit F5. Weil bei STRG+F5 schließt sich das Konsolenfenster nicht sofort, sondern man muß es mit einer Taste bestätigen.



  • meine ausgabe lautet:

    [Session started at 2008-07-16 14:32:55 +0200.]
    1 - Start
    2 - Info
    3 - Ende

    nach ändern des codes, lautet die ausgabe:

    [Session started at 2008-07-16 14:34:40 +0200.]
    1 - Start
    2 - Info
    Sie wählten: 3 - Ende



  • muemmel schrieb:

    Zum anderen, und das ist wichtiger, am Ende anhalten. Das geht am einfachsten, wenn Du nach Zeile 28 noch mal Ziele 12 wiederholst. Du must dann zum Beenden noch mal eine Zahl eingeben.

    Viel Erfolg wünscht Mümmel

    nach zeile 28 gab ich die zeile 12 ein, was genau meinst du mit beenden ncoh eine zahl eingeben? und wo soll ich diese eingeben?

    gruss



  • Du weißt was eine Konsole ist? Falls nicht: das ist dieses Kommandofenster, oder auch gerne DOS-Fenster genannt. Und diese Konsole/Konsolenfenster schließt sich sofort, nach deiner Tasteneingabe. Natürlich siehst du dann das Ergebnis nicht, weil das Fenster sich ja sofort schließt. Der PC ist natürlich so ultra schnell mit der Darstellung des Ergebnisses, und dem Schließen des Fensters, das du das garnicht sehen kannst.

    Starte doch mal dein Programm aus der Konsole heraus! (aber das müssen wir dir wahrscheinlich auch noch erklären?)

    Was für eine IDE benutzt Du denn? VisualC++? Falls ja, dann starte dein Programm doch mit STRG+F5 und nicht mit F5. Weil bei STRG+F5 schließt sich das Konsolenfenster nicht sofort, sondern man muß es mit einer Taste bestätigen.

    da ich an meinem macbookpro arbeite benutze ich kein dos-fenster sondern das mac-terminal. jedoch schliesst sich das fenster nicht!! es bleibt offen und zeigt mir diese zeilen an:

    1 - Start
    2 - Info
    Sie wählten: 3 - Ende

    was meinst du mit, ich solle es aus der konsole starten? mach ich das denn nicht schon?

    danke im voraus!!



  • Hi silkesommer,

    probiers mal so:

    #include <iostream> 
    using namespace std; 
    
    int main() 
    { 
        int eingabe; 
    
        cout << "1 - Start" << endl;       //Eingabehinweise
        cout << "2 - Info"  << endl; 
        cout << "3 - Ende"  << endl; 
        cout << endl;                      // Leerzeile
        cout << "Bitte Zahl auswählen ";   // Eingabe-Aufforderung ohne
                                           // Zeilenschaltung danach
    
        cin >> eingabe;                    // Eingabe der Zahl
    
        switch(eingabe)                    // Verzweigung anhand Eingabe
        { 
        case 1:                            // Fall 1
                cout << " Sie wählten 1 für Start" << endl; 
                break;                     // die anderen Fälle überspringen
        case 2: 
                cout << " Sie wählten 2 für Info" << endl; 
                break; 
        case 3: 
                cout << " Sie wählten 3 für Ende" << endl;
                break;            
        default:                           // wenn keines von den angegebenen
                cout << " Sie wählten eine nicht gültige Zahl" << endl; 
                break;                     // hier nicht nötig aber guter Stil
        } 
    
        cout << "Bitte Zahl für beenden eingeben ";    // Hinweis für Eingabe
    
        cin >> eingabe;                    // Auf Eingabe Warten danach Schluss
    
    return 0; 
    }
    

    Damit müsste es gehen. Ich habs mal ein bisschen kommentiert (alles nach //).

    Gruß Mümmel

    PS: Nein, Du startest es als Konsolenanwendung aber nicht von der Konsole. Also mach ein MS-DOS-Fenster auf und starte es von da.



  • 😃 ; 👍 ; ➡ 💡 💡 💡 💡

    wowwwwww, jetzt hab ichs verstanden 😮

    cool, danke!!! du meine güte, ist doch total logisch. danke für eure geduld.

    vg



  • Hi,

    nix zu danken, wenns noch Fragen gibt wieder melden.

    Gruß Mümmel



  • muemmel schrieb:

    cout << "Bitte Zahl für beenden eingeben ";

    muss dieser befehl nicht wie folgt enden:

    cout << "Bitte Zahl für beenden eingeben " << endl;

    gruss



  • Hi Silkesommer,

    nein, muß nicht unbedingt. Das endl heißt ja nicht daß es das Ende der Zeichenkette ist, sondern es führt eine Zeilenschaltung und einen Wagenrücklauf durch.
    Mit endl gibst du die Zahl auf der nächsten Zeile ein, ohne gleich dahinter in der selben Zeile.
    Früher war das zum Teil notwendig, weil auf alten Betriebssystemen die Zeile teilweise erst nach dem endl geschrieben wurde. Müsste aber bei dir auch ohne gehen.

    Gruß Mümmel


Anmelden zum Antworten