c++ Frage

the_midget

Erleuchteter
Registriert
28. Juni 2004
Beiträge
1.878
Hallo,

ich lerne gerade C++ und hab folgendes lästiges Problem:

Ich benutze als Compiler Dev-C++ von Bloodshed (mit Windows XP). Das Problem ist, das jedesmal wenn das Programm kompiliert und ausgeführt wird das kleine schwarze Fenster sofort wieder zugeht sobald das Programm durch ist. Das heisst ich sehe überhaupt nicht was das Programm macht. Zwar kann ich das mit einem Trick umgehen (ich setze in die main() immer ein int test und am Ende dann ein cin >> test so daß das Programm auf eine Eingabe wartet bevor es sich schliesst) das ist jedoch sehr lästig, das dann jedesmal mit reinzusetzen. Mit dem Microsoft-C++ Compiler soll das wohl nicht nötig sein, den will ich aber nicht benutzen.

Hat vielleicht jemand ne Ahnung, ob es im Compiler von Bloodshed irgendeine Option oder sowas gibt, wo man das anders einstellen kann, so daß ich dieses int test nicht jedesmal einfügen muss??


gruß

the midget
 

SeRialMaSter

Meister
Registriert
15. Januar 2003
Beiträge
267
Ist wahrscheinlich ein Dos-basierender Compiler, und die schließen sich in Windows automatisch wieder, wenn die Befehlskette ausgeführt wurde. Mach das ganze mal in der Dos-Eingabeaufforderung, denn die bleibt auch noch da, wenn alle Befehle durch sind. Ich hoffe ich konnte helfen. (Und hoffentlich hab ich das nicht irgendwie komplett falsch verstanden)
Greetz 8)
 

the_midget

Erleuchteter
Registriert
28. Juni 2004
Beiträge
1.878
SeRialMaSter schrieb:
Ist wahrscheinlich ein Dos-basierender Compiler, und die schließen sich in Windows automatisch wieder, wenn die Befehlskette ausgeführt wurde. Mach das ganze mal in der Dos-Eingabeaufforderung, denn die bleibt auch noch da, wenn alle Befehle durch sind. Ich hoffe ich konnte helfen. (Und hoffentlich hab ich das nicht irgendwie komplett falsch verstanden)
Greetz 8)

Öhm.. Du meinst ich soll den Compiler von einer Dos-Umgebung aus ausführen?? (hab leider keine ahnung wie das gehen soll)? Also im Moment ist das der Compiler einfach ganz normal in Windows XP zu starten wie jedes Programm auch (doppelklick auf icon).

die kompilierte und gelinkte exe könnte ich natürlich von der Dos-Eingabeaufforderung ausführen... allerdings wäre das dann für mich noch umständlicher als wie es jetzt ist (ich müsste dann jedesmal in Dos-Eingabe wechseln, das Verzeichnis wo die Exe ist angeben und könnte dann erst das Programm ausführen...) so wie es jetzt ist, muss ich nur einen Knopf drücken und es wird kompiliert und ausgeführt... und ich muss eben jedesmal noch zwei Zeilen code einfügen, damit er das Fenster nicht gleich wieder schliesst...

Trotzdem danke..


gruß

midget
 

Franziskaner

Ehrenmitglied
Registriert
4. Januar 2003
Beiträge
4.790
du gehst auf Start - Ausführen und gibst dort ein "cmd" (ohne Anführungszeichen) und drückst <Enter>.

Dann geht ein DOS-Fenster auf, dort wechselst du über "cd /verzeichnis" in dein entsprechendes Verzeichnis und führst deine Exe über die Angabe des Programmnamens und <Enter> aus...

Wenn dir das Schwierigkeiten bereiten sollte, würde ich entweder auf einen Compiler ausweichen, der standardmässig schon Win32 Anwendungen erzeugt oder mich erst mal in die notwendigen DOS-Befehle einarbeiten...
 

the_midget

Erleuchteter
Registriert
28. Juni 2004
Beiträge
1.878
Franziskaner schrieb:
du gehst auf Start - Ausführen und gibst dort ein "cmd" (ohne Anführungszeichen) und drückst <Enter>.

Dann geht ein DOS-Fenster auf, dort wechselst du über "cd /verzeichnis" in dein entsprechendes Verzeichnis und führst deine Exe über die Angabe des Programmnamens und <Enter> aus...

Wenn dir das Schwierigkeiten bereiten sollte, würde ich entweder auf einen Compiler ausweichen, der standardmässig schon Win32 Anwendungen erzeugt oder mich erst mal in die notwendigen DOS-Befehle einarbeiten...

Wie gesagt, daß wäre für mich noch umständlicher als es derzeit ist. Ich glaub ihr habt mich immer noch nicht ganz verstanden... ich geb euch mal ein Beispiel:


Code:
#include <iostream>
using namespace std;

int main()
{

    cout << "Fuck The World!\n";

    return 0;
}

Also in der Form würde es eigentlich mit jedem Compiler ganz normal gehen soweit ich weiss.

Bei mir kompiliert der Compiler und führt dann automatisch aus. Dabei sind man eben kurz das kleine schwarze Fenster aufflackern. Das Problem ist, daß er das Fenster sofort schliesst, sobald das Programm abgearbeitet ist...
Deshalb muss ich da jedesmal noch zwei zusätzliche Zeilen rein machen, das sieht dann so aus:

Code:
#include <iostream>
using namespace std;

int main()
{
int test;
    cout << "Fuck The World!\n";
cin >> test;
    return 0;
}

ich hab dann eben int test; und cin >> test; eingefügt. Dadurch läuft das Programm dann nicht durch, sondern hält an und wartet auf eine Eingabe, so dass sich das Fenster nicht sofort schliesst. Erst wenn man etwas eingibt. Wie gesagt, daß ist wohl eine Eigenart des Compilers und ich wollt wissen ob jemand weiss, ob man die abstellen kann... Ist zwar nicht so wild, aber wie gesagt ein bisschen lästig.

gruß
Code:
midget ;-)
 

Franziskaner

Ehrenmitglied
Registriert
4. Januar 2003
Beiträge
4.790
the_midget schrieb:
Ich glaub ihr habt mich immer noch nicht ganz verstanden...

Doch, haben wir...leider du uns (noch) nicht :wink:

Also, dein Compiler erzeugt EXE Dateien für DOS, nicht für WIN32. Von daher wird jedes deiner Programme durch einen Doppelklick mit der verknüpften Anwendung für DOS-EXE gestartet, das ist die sog. DOS-Eingabeaufforderung. Diese schliesst sich nach Beendigung des Programms von selbst.

Wenn du das automatische Schliessen verhindern willst, musst du die Eingabeaufforderung manuell öffnen, wie oben beschrieben, und das Programm dann durch Eingabe des Programmnamens dort starten. Dann schliesst sich die Box nicht von selber.

So, wenn dir das zu kompliziert ist, dann möchte ich dir empfehlen, dich zuerst mit DOS, dann mit der Win32 Architektur vertraut zu machen, bevor du komplexere Programme in C/C++ oder C# entwickelst, weil du sonst früher oder später auf noch massivere Verständnisprobleme stossen wirst.

Und sag jetzt nicht, du willst dich mit dem ganzen Zeug nicht auseinandersetzen, sondern einfach nur C++ lernen...sonst krieg ich nen Schreikrampf! :twisted:
 

the_midget

Erleuchteter
Registriert
28. Juni 2004
Beiträge
1.878
Franziskaner schrieb:
the_midget schrieb:
Ich glaub ihr habt mich immer noch nicht ganz verstanden...


Wenn du das automatische Schliessen verhindern willst, musst du die Eingabeaufforderung manuell öffnen, wie oben beschrieben, und das Programm dann durch Eingabe des Programmnamens dort starten. Dann schliesst sich die Box nicht von selber.

Das hatte ich verstanden, nur ist das für mich im moment noch umständlicher als zwei Zeilen Code in das zu kompilierende Programm einzufügen...

So, wenn dir das zu kompliziert ist, dann möchte ich dir empfehlen, dich zuerst mit DOS, dann mit der Win32 Architektur vertraut zu machen, bevor du komplexere Programme in C/C++ oder C# entwickelst, weil du sonst früher oder später auf noch massivere Verständnisprobleme stossen wirst.

Also mit Dos kenn ich mich eigentlich einigermaßen aus. Was die Win32 Architektur angeht, hast du vermutlich recht.

Und sag jetzt nicht, du willst dich mit dem ganzen Zeug nicht auseinandersetzen, sondern einfach nur C++ lernen...sonst krieg ich nen Schreikrampf! :twisted:

:twisted: dann richte denjenigen, die eventuell durch deinen Schreikampf
ver/ge-stört werden bitte eine Entschuldigung von mir aus...

Im Moment gehts mir tatsächlich erstmal nur um c++. ich lern das gerade aus einem Buch mit dem seriösen Titel: "C++ in 21 tagen". Im Moment hab ich auch gar nicht vor, daß irgendwie praktisch anzuwenden, sondern ich lern das eigentlich nur, um es dann jemand anderem erklären zu können... Allerdings macht mir das schon Spaß und ich werde mich vermutlich auch noch darüber hinaus damit beschäftigen und wenn die Notwendigkeit gekommen ist, werd ich mich auch mit der Win32 Architektur auseinandersezten... Ehrenwort ;-)


gruß

the midget
 

Franziskaner

Ehrenmitglied
Registriert
4. Januar 2003
Beiträge
4.790
the_midget schrieb:
dann richte denjenigen, die eventuell durch deinen Schreikampf ver/ge-stört werden bitte eine Entschuldigung von mir aus...

naja, die Kollegen verstehn mich grad nimmer, vielleicht liegts daran, dass ihnen Blut aus den Ohren läuft... :twisted:

Im Moment gehts mir tatsächlich erstmal nur um c++. ich lern das gerade aus einem Buch mit dem seriösen Titel: "C++ in 21 tagen". Im Moment hab ich auch gar nicht vor, daß irgendwie praktisch anzuwenden, sondern ich lern das eigentlich nur, um es dann jemand anderem erklären zu können... Allerdings macht mir das schon Spaß und ich werde mich vermutlich auch noch darüber hinaus damit beschäftigen und wenn die Notwendigkeit gekommen ist, werd ich mich auch mit der Win32 Architektur auseinandersezten... Ehrenwort ;-)

Ich nehm dich beim Wort und werd dich in 21 Tagen abfragen... :wink:

Es wird aber auch in deinem Buch der Zeitpunkt kommen, wo du Windows-Anwendungen programmierst, die eine Ausgabe in einem "normalen" Windows Fenster erzeugen...das schliesst sich dann auch nicht mehr so einfach, vorausgesetzt, dein Compiler spielt bis dahin mit (ich kenn den nicht, und weiss daher auch nicht, ob er Win32-APIs unterstützt).

Aber bevor du Programme entwickelst und in Umlauf bringst, informierst du dich bitte über Pointer, Stacks und Heaps sowie Buffer Overflows und Formatstring Attacken, ja? Ich hab nämlich schon genug anfällige Software am Hintern kleben, deren Sicherheitslücken zahllos und unbeherrschbar sind... :wink: :twisted:
 

the_midget

Erleuchteter
Registriert
28. Juni 2004
Beiträge
1.878
Franziskaner schrieb:
Aber bevor du Programme entwickelst und in Umlauf bringst, informierst du dich bitte über Pointer, Stacks und Heaps sowie Buffer Overflows und Formatstring Attacken, ja? Ich hab nämlich schon genug anfällige Software am Hintern kleben, deren Sicherheitslücken zahllos und unbeherrschbar sind... :wink: :twisted:

Ja über Stacks (und Register) kam schon was indem Buch vor und der Rest wird glaub ich auch noch erklärt. Außerdem gibt es noch einen Anhang der dicker ist als das eigentliche Buch, indem auf diverse Dinge, die damit zu tun haben eingegangen wird.

Du solltest Computersicherheitsminister werden, du bist der Otto Schilly der Software ;-)


gruß

the midget
 

Trasher

Forenlegende
Registriert
10. April 2002
Beiträge
5.842
Setz einfach noch ein
Code:
char c;
scanf(&c);
vor die return-Anweisung und das Programm wartet am Ende auf eine Tasteneingabe, bevor es beendet wird.

Ist nicht die feine englische, aber es funktioniert. ;)

[EDIT] Ah, sorry. Gerade das wolltest Du ja vermeiden...

Dann erzeuge Dir einfach eine Batch-Datei, in der Du das Programm aufrufst, in der nächsten Zeile schreibst Du "pause".
Batch auf den Desktop verlinken und fertig.
 

the_midget

Erleuchteter
Registriert
28. Juni 2004
Beiträge
1.878
Franziskaner schrieb:
the_midget schrieb:
Du solltest Computersicherheitsminister werden,

Einverstanden, ich könnt die Pension gut vertragen..

du bist der Otto Schilly der Software

aber mein Haarschnitt ist besser! :lol:

Das will ich hoffen...

Trasher schrieb:
Dann erzeuge Dir einfach eine Batch-Datei, in der Du das Programm aufrufst, in der nächsten Zeile schreibst Du "pause".
Batch auf den Desktop verlinken und fertig.

Ne sorry das finde ich immer noch zu umständlich... Aber der andere Tipp war nicht schlecht... Dann muss ich wenigstens nur an einer Stelle noch was in den Code einfügen statt an zwei....

danke und gruß

m.
 

SeRialMaSter

Meister
Registriert
15. Januar 2003
Beiträge
267
Franziskaner schrieb:
Aber bevor du Programme entwickelst und in Umlauf bringst, informierst du dich bitte über Pointer, Stacks und Heaps sowie Buffer Overflows und Formatstring Attacken, ja? Ich hab nämlich schon genug anfällige Software am Hintern kleben, deren Sicherheitslücken zahllos und unbeherrschbar sind... :wink: :twisted:
Na wenn er jetzt noch nicht kapiert, wie wir das meinen, sollte man ihn nicht gleich mit sowas überfordern :D :D :D
 

Trasher

Forenlegende
Registriert
10. April 2002
Beiträge
5.842
the_midget schrieb:
Ne sorry das finde ich immer noch zu umständlich... Aber der andere Tipp war nicht schlecht... Dann muss ich wenigstens nur an einer Stelle noch was in den Code einfügen statt an zwei....
Die Variablendeklaration kannst Du auch bei deiner Variante mit nach unten nehmen. ;)
 

the_midget

Erleuchteter
Registriert
28. Juni 2004
Beiträge
1.878
Trasher schrieb:
the_midget schrieb:
Ne sorry das finde ich immer noch zu umständlich... Aber der andere Tipp war nicht schlecht... Dann muss ich wenigstens nur an einer Stelle noch was in den Code einfügen statt an zwei....
Die Variablendeklaration kannst Du auch bei deiner Variante mit nach unten nehmen. ;)

ach so... na dann muss ich mir ja nochnichtmal einen neuen Befehl merken ;-)


gruß

the midget
 

Ähnliche Beiträge

Oben