Programm schließt sich immer, warum?!



  • Hallo,
    ich habe ein Problem mit meinem Programm!
    Immer wenn ich es ausführe, schließt es sich nachdem ich die Zahlen eingegeben habe.. 👎
    Auch der Befehl getchar(); hilft mir nicht.
    Lediglich system("stop"); aber den will ich nicht verwenden es muss doch eine "normale" Lösung geben? Hab gerade erst angefangen mit dem Programmieren und komm leider von alleine nicht weiter.

    Hier mein Programmcode:

    1: #include <iostream>
    2: int Add (int x, int y)
    3: {
    4:
    5: cout << "In Add(), erhalten " << x << " und " << y << "\n";
    6: return (x+y);
    7: }
    8:
    9: int main()
    10: {
    11: cout << "Ich bin in main()!\n";
    12: int a, b, c;
    13: cout << "Geben Sie zwei Zahlen ein: ";
    14: cin >> a;
    15: cin >> b;
    16: cout << "\nAufruf von Add()\n";
    17: c = Add(a,b);
    18: cout << "\nZurueck in main().\n";
    19: cout << "c wurde gesetzt auf " << c;
    20: cout << "\nBeenden...\n\n";
    21: return 0;
    22: getchar();
    23: }

    Liebe Grüße,
    SLWall101 :p



  • Das ist ein Konsolenprogramm! Öffne eine Konsole, navigiere in das Verzeichnis, in dem die ausführbare Datei liegt, und starte das Programm aus der Konsole!
    Die Konsole bleibt dann nach Programmende offen.



  • Hi
    ich nehm immer :

    system("PAUSE");
    

    dann bleibt die konsole offen bis zum nächsten Tastendruck...
    warum willst du system nicht benutzen? 😕



  • Es muss doch ohne System("PAUSE"); auch funktionieren oder?
    Meine vorherigen Programme haben sich auch nicht geschlossen als ich getchar(); verwendet habe?

    LG



  • Belli schrieb:

    Das ist ein Konsolenprogramm! Öffne eine Konsole, navigiere in das Verzeichnis, in dem die ausführbare Datei liegt, und starte das Programm aus der Konsole!
    Die Konsole bleibt dann nach Programmende offen.

    Wie meinst du das? Soll ich das Programm praktisch aus dem CMD Fenster starten?
    Wie gesagt, hab erst zu Programmieren begonnen..



  • SLWall101 schrieb:

    Es muss doch ohne System("PAUSE"); auch funktionieren oder?
    Meine vorherigen Programme haben sich auch nicht geschlossen als ich getchar(); verwendet habe?
    LG

    Du hast getchar() NACH return geschrieben, da isses zu spät.

    Im Übrigen, falls Du MSVC benutzt, starte das Prog einfach mit Strg+F5 statt mit F5, dann hält die IDE es offen.



  • volkard schrieb:

    SLWall101 schrieb:

    Es muss doch ohne System("PAUSE"); auch funktionieren oder?
    Meine vorherigen Programme haben sich auch nicht geschlossen als ich getchar(); verwendet habe?
    LG

    Du hast getchar() NACH return geschrieben, da isses zu spät.

    Im Übrigen, falls Du MSVC benutzt, starte das Prog einfach mit Strg+F5 statt mit F5, dann hält die IDE es offen.

    Habe das getchar() auch schon vor return benutz gehabt, funktionierte leider auch nicht..



  • SLWall101 schrieb:

    Es muss doch ohne System("PAUSE"); auch funktionieren oder?
    Meine vorherigen Programme haben sich auch nicht geschlossen als ich getchar(); verwendet habe?

    LG

    ja klar, getchar() vor return, wie schon gesagt oder einfahc noch eine "eingabe" die auf einen tastendruck wartet...

    aber warum willst du nicht system("PAUSE") nutzen? ist da was schlecht drann? 😕



  • GetLastError schrieb:

    aber warum willst du nicht system("PAUSE") nutzen? ist da was schlecht drann? 😕

    Liest du hier



  • GetLastError schrieb:

    SLWall101 schrieb:

    Es muss doch ohne System("PAUSE"); auch funktionieren oder?
    Meine vorherigen Programme haben sich auch nicht geschlossen als ich getchar(); verwendet habe?

    LG

    ja klar, getchar() vor return, wie schon gesagt oder einfahc noch eine "eingabe" die auf einen tastendruck wartet...

    aber warum willst du nicht system("PAUSE") nutzen? ist da was schlecht drann? 😕

    Ne im Grunde genommen nicht, aber ich will dass nicht dass da dann der Text steht etc. optische Gründe praktisch 😃
    Ne, will einfach verstehen, warum man da nicht getchar() verwenden kann sondern ne pause machen muss.. wenn ich dann später größere Programme schreibe, muss es doch auch möglich sein ohne pause arbeiten zu können?



  • SLWall101 schrieb:

    Habe das getchar() auch schon vor return benutz gehabt, funktionierte leider auch nicht..

    Kann sein, daß es mit der letzten Eingabe ein Problem gibt, weil nach dem Lesen des int noch ein '\n' im Eingebastrom hing. Dann hülfe zweimaliges getchar().



  • SLWall101 schrieb:

    Ne, will einfach verstehen, warum man da nicht getchar() verwenden kann sondern ne pause machen muss..

    Vermutlich weil noch was im Buffer/Inputstream von vorherigen eingaben hängt (Newline, Space, ...)

    SLWall101 schrieb:

    wenn ich dann später größere Programme schreibe, muss es doch auch möglich sein ohne pause arbeiten zu können?

    Normale Programme terminieren nach beendigung ihrer Arbeit, und genau das macht dein Programm auch.



  • volkard schrieb:

    SLWall101 schrieb:

    Habe das getchar() auch schon vor return benutz gehabt, funktionierte leider auch nicht..

    Kann sein, daß es mit der letzten Eingabe ein Problem gibt, weil nach dem Lesen des int noch ein '\n' im Eingebastrom hing. Dann hülfe zweimaliges getchar().

    Habe auch schon versucht im ersten und 2. int ein getchar() zu setzen, wurde trz. beendet. Oder soll ich im int main() 2 mal getchar verwenden?
    Oder einfach das \n weg lassen?



  • tkausl schrieb:

    SLWall101 schrieb:

    Ne, will einfach verstehen, warum man da nicht getchar() verwenden kann sondern ne pause machen muss..

    Vermutlich weil noch was im Buffer/Inputstream von vorherigen eingaben hängt (Newline, Space, ...)

    SLWall101 schrieb:

    wenn ich dann später größere Programme schreibe, muss es doch auch möglich sein ohne pause arbeiten zu können?

    Normale Programme terminieren nach beendigung ihrer Arbeit, und genau das macht dein Programm auch.

    Sorry bin noch Anfänger.. Weiß gerade nicht was genau du meinst 😞



  • SLWall101 schrieb:

    Belli schrieb:

    Das ist ein Konsolenprogramm! Öffne eine Konsole, navigiere in das Verzeichnis, in dem die ausführbare Datei liegt, und starte das Programm aus der Konsole!
    Die Konsole bleibt dann nach Programmende offen.

    Wie meinst du das? Soll ich das Programm praktisch aus dem CMD Fenster starten?

    Ja!



  • Skym0sh0 schrieb:

    GetLastError schrieb:

    aber warum willst du nicht system("PAUSE") nutzen? ist da was schlecht drann? 😕

    Liest du hier

    - interessant 🙂 ...
    - spielt hier ja aber keine rolle... 😉

    SLWall101 schrieb:

    tkausl schrieb:

    SLWall101 schrieb:

    Ne, will einfach verstehen, warum man da nicht getchar() verwenden kann sondern ne pause machen muss..

    Vermutlich weil noch was im Buffer/Inputstream von vorherigen eingaben hängt (Newline, Space, ...)

    SLWall101 schrieb:

    wenn ich dann später größere Programme schreibe, muss es doch auch möglich sein ohne pause arbeiten zu können?

    Normale Programme terminieren nach beendigung ihrer Arbeit, und genau das macht dein Programm auch.

    Sorry bin noch Anfänger.. Weiß gerade nicht was genau du meinst 😞

    - d.h dein programm endet wenn es fertig mit seinen "aufgaben/arbeiten" ist wie es ein programm tun soll! 😉

    - du kannst dir auch mit qt ne gui bauen die schließt nicht, außer du gibt den befehl 😉 ... -> sieht auch Optisch schöner aus 😃



  • Belli schrieb:

    SLWall101 schrieb:

    Belli schrieb:

    Das ist ein Konsolenprogramm! Öffne eine Konsole, navigiere in das Verzeichnis, in dem die ausführbare Datei liegt, und starte das Programm aus der Konsole!
    Die Konsole bleibt dann nach Programmende offen.

    Wie meinst du das? Soll ich das Programm praktisch aus dem CMD Fenster starten?

    Ja!

    Aber warum so unpraktisch? Kann es ja aus C++ heraus debuggen will ja da schon sehen ob alles läuft oder nicht?



  • - du kannst dir auch mit qt ne gui bauen die schließt nicht, außer du gibt den befehl 😉 ... -> sieht auch Optisch schöner aus :D[/quote]

    und wie kann ich mir ne gui bauen bzw was ist das?:)
    Bin hier erst bei Kapitel 2, Listing 2.5: FUNC.CPP demonstriert eine einfache Funktion

    http://www.informit.de/books/c%2B%2B21/data/inhalt.htm



  • SLWall101 schrieb:

    Oder soll ich im int main() 2 mal getchar verwenden?
    Oder einfach das \n weg lassen?

    Genau. Oder cin.get(). Direkt vor dem return zweimal.

    Und dann rausfinden, wie man es mit cin richtig machen würde. Steht glaub ich in der Konsolen-FAQ in diesem Forum. Irgendwie vorher schnell die Zeichen weglesen, die noch im cin anliegen.
    Kannst das '\n' vom Benutzer nicht weglassen.
    Der gibt "42\n" ein und erst mit dem '\n' kriegt das Programm die EIngabezeile geschickt. Das Prog liest "42" weg und "\n" steht noch drin. Gemeinerweise kann der Benutzer auch "42 \n" eingeben, dann brächstest Du drei cin.get(), ach wie lästig. Aber dafür gibts ja den Trick mit dem Weglesen.



  • volkard schrieb:

    SLWall101 schrieb:

    Oder soll ich im int main() 2 mal getchar verwenden?
    Oder einfach das \n weg lassen?

    Genau. Oder cin.get(). Direkt vor dem return zweimal.

    Und dann rausfinden, wie man es mit cin richtig machen würde. Steht glaub ich in der Konsolen-FAQ in diesem Forum. Irgendwie vorher schnell die Zeichen weglesen, die noch im cin anliegen.
    Kannst das '\n' vom Benutzer nicht weglassen.
    Der gibt "42\n" ein und erst mit dem '\n' kriegt das Programm die EIngabezeile geschickt. Das Prog liest "42" weg und "\n" steht noch drin. Gemeinerweise kann der Benutzer auch "42 \n" eingeben, dann brächstest Du drei cin.get(), ach wie lästig. Aber dafür gibts ja den Trick mit dem Weglesen.

    Alles klar, das klingt nach einer guten Lösung mal hoffen dass es klappt!:)
    Versuch es Abends gleich und geb dann kurz Bescheid ob alles funktioniert hat. 🙂
    cin.getchar() bedeutet praktisch, dass es beim cin stoppen soll, versteh ich das richtig?:)


Anmelden zum Antworten