Konsole schließt sich sofort wieder - Lösung?



  • HI.

    Ich hab ein kleines Rechenprog geschrieben.

    //Rechenprogramm von Simon 
    
    #include <iostream>
    
    #include <string>
    using namespace std;
    
    int main()
    {
    	string Ueberschrift("***  Rechenprogramm  ***"),
    		    linie(50, '-');
    int Wahl;
    int x;
    int y;
    int x2;
    int y2;
    int summe;
    int Differenz;
    
    summe = x + y;
    Differenz = x2 - y;
    
    //Gibt ein Menue aus, wo der Anwender zwischen Addition und Subtraktion wählen kann
    cout << Ueberschrift << endl << linie << endl;
    	cout << "Menue" << endl << linie;
        cout << endl << "Addieren         [1]" << endl;
    	cout         << "Subtrahieren     [2]";
    	cout << endl << endl << "Ihre Wahl : ";
        cin  >> Wahl;
    
    	switch(Wahl)
    	{
    	case 1: cout << "Bitte 1. Zahl eingeben : ";
    	        cin  >> x;
    			cout << "2. Zahl : ";
    	         cin >> y;
                 cout << "Das Ergebnis ist"
    				  << endl << summe;
    			 break;
    
    	case 2: cout << "Bitte 1. Zahl eingeben : ";
    			 cin >> x2;
    			cout << "2. Zahl : ";
    			cin  >> y2;
    			cout << "Das Ergebnis ist"
    				 << endl << summe;
    
    	break;
    	}
    
    				 return 0;
    }
    

    (Ich weiß, das Programm ist ziemlich primitiv, das ist auch nur zu Übungszwecken, auch noch net fertig)
    Ja, mein Problem ist, das sobald man 2 Zahlen eingegeben hat (nach der Wahl zwischen Addition und Subratkion) sich die Konsole sofort schließt und man das Ergebnis nicht sieht!

    ich hab es versucht mit cin.get(j) und ner Frage ob man beenden will j/n... ergebnislos.

    Jetzt meine Frage: Wie kann ich verhindern, dass sich die Konsole sofort wieder schliesst ?

    Dann hab ich noch eine 2. Frage...

    und zwar, wenn ich ein größeres Programm habe mit mehreren Funktionen und ich einen Menüpunkt einbauen will ( programm beenden [0]) lässt es zwar diese Funktion aus, aber dann macht er einfach mit der nächsten weiter.
    Wie kann ich das verhindern?

    Ich möchte also eine Möglichkeit -> Funktion auslassen 8so wie ich das bisher habe)
    und dann noch Programm GANZ Beenden.
    Also, dass sich die Konsole dann schlie0t.
    hab echt keine Ahnung wie ich das hinkriegen kann, hab auch schon mit ein paar Sachen rumgespielt aber bisher noch ohne Erfolg.

    Ich hoffe, dass mir jemand meine Fragen beantworten kann 🙂

    Vielen Dank schonmal
    Simon



  • Simon22 schrieb:

    Jetzt meine Frage: Wie kann ich verhindern, dass sich die Konsole sofort wieder schliesst ?

    Schau dazu mal in die "Win32 und Konsolen FAQ" Thread: "Automatisches Schließen verhindern" o.ä.

    Deine zweite Frage verstehe ich nicht ganz...

    Gruß Caipi



  • Hi

    schreib vor return das hier:

    fflush(stdin); cin.peek();

    dann müsste es eigenlich gut gehen 🙂



  • Und wenn ich die 2te Frage richtig verstanden habe, dann willst du, dass man im Menü so oft wählen kann, bis man zum Beispiel die 0 für Programm beenden drückt, ja?

    Wenn ja, dann kann man das einfach mit ner do-while Schleife machen... müsste dann so aussehen:

    do
    {
       MENÜ
    }
    while(Wahl != 0);
    

    Ciao!!



  • Hi,

    Ania87 schrieb:

    fflush(stdin);

    das erzeugt undefiniertes Verhalten:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39349.html



  • ich hatte noch nie probleme damit 😉
    naja für solche Programme reichts auch vollkommen...



  • Ania87: Frickler



  • Hi,

    Ania87 schrieb:

    ich hatte noch nie probleme damit 😉
    naja für solche Programme reichts auch vollkommen...

    da stellt sich natürlich dann die Frage, wieviel Aufwand es ist, diesen Fehler zu umgehen und im Vorfeld eine mögliche Fehlerquelle zu eliminieren. Wenn man etwas lernt, sollte man es schon richtig machen, oder ganz lassen.



  • okay zur 1. Frage, werd ich mal im Forum schaun!

    Ich meinte mit der 2. Frage...

    Wenn ich ein Menue habe und ein Menüpunkt angebe

    Programm schliessen [0]

    dann beendet er diese Funtkion und geht zur nächsten

    Ich möchte aber, dass es das programm ganz beendet! (Und Konsolo schliesst)
    D.h. auch wenns noch 15 weitere Funktionen gibt, ist Schluss!



  • okay, das mit void wait() usw hat nicht geklappt...

    dafür #include <conio.h> mit getch();

    dann hab ich aber noch ein anderes Problem... egal ob ich Addition oder Subtraktion wähle, nachdem ich die 2 Zahlen eingeben habe, zeigt er als Ergebnis eine 10 stellige lösung an!
    Da ich es auch mit 1+1 probier habe, muss irgendwo ein Fehler sein...ich kann ihn nicht finden

    kann sich jemand vielleicht nochmal den code angucken? wäre super

    //Rechenprogramm von Simon 
    
    #include <iostream>
    #include <string>
    #include <conio.h>
    using namespace std;
    
    int main()
    {
    	string Ueberschrift("***  Rechenprogramm  ***"),
    		    linie(50, '-');
    int Wahl;
    int x;
    int y;
    int x2;
    int y2;
    int summe;
    int Differenz;
    
    summe = x + y;
    Differenz = x2 - y;
    
    //Gibt ein Menue aus, wo der Anwender zwischen Addition und Subtraktion wählen kann
    cout << Ueberschrift << endl << linie << endl;
    	cout << "Menue" << endl << linie;
        cout << endl << "Addieren         [1]" << endl;
    	cout         << "Subtrahieren     [2]";
    	cout << endl << endl << "Ihre Wahl : ";
        cin  >> Wahl;
    
    	switch(Wahl)
    	{
    	case 1: cout << "Bitte 1. Zahl eingeben : ";
    	        cin  >> x;
    			cout << "2. Zahl : ";
    	         cin >> y;
                 cout << "Das Ergebnis ist"
    				  << endl << summe;
    			 break;
    
    	case 2: cout << "Bitte 1. Zahl eingeben : ";
    			 cin >> x2;
    			cout << "2. Zahl : ";
    			cin  >> y2;
    			cout << "Das Ergebnis ist"
    				 << endl << summe;
    
    	break;
    	}
    
    getch();
    
    				 return 0;
    }
    


  • schon gut, wenn die funktion so gräßlich ist, dann lässt es bleiben 😉

    zur 2ten frage, wenn du das mit der do-while-schleife machst, denn bricht er an der stelle ab wo du es willst, ansonsten wenn du was anderes meinst, dann verstehe ich dich leider auch nicht...



  • Kein Wunder. Du Addierst bzw. Subtrahierst, bevor dein Programm überhaupt weiß, was eingegeben werden wird. Auf das wesentliche reduziert gitb dein Programm ungefähr diesen Pseudocode:

    int x = irgendwas_was_schon_vorher_im_speicher_stand;
    int y = ebenso;
    int summe = x + y; //woher soll denn der computer wissen, was bei einlesen() eingelesen werden wird???
    int differenz = x - y;
    einlesen();
    if(aktion == addieren)
      print(summe);
    if(aktion == subtrahieren)
      print(differenz);
    

    Achtung, das ist Pseudocode, der nicht zum compilieren geeignet ist.
    geloescht



  • merci beacoup!

    hab das jetzt in

    switch(Wahl)
    	{
    	case 1: cout << "Bitte 1. Zahl eingeben : ";
    	        cin  >> x;
    			cout << "2. Zahl : ";
    	         cin >> y;
                 summe = x + y;
    			 cout << "Das Ergebnis ist"
    				  << endl << summe;
    			 break;
    
    	case 2: cout << "Bitte 1. Zahl eingeben : ";
    			 cin >> x2;
    			cout << "2. Zahl : ";
    			cin  >> y2;
    			Differenz = x2 - y2;
    			cout << "Das Ergebnis ist"
    				 << endl << Differenz;
    
    	break;
    

    geändert...und siehe da...es funtkioniert !


Anmelden zum Antworten