Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Mordan Mini JLI'ler
Anmeldedatum: 03.12.2006 Beiträge: 3
Medaillen: Keine
|
Verfasst am: 05.12.2006, 15:44 Titel: Anfängerproblem - .exe Datei |
|
|
Hallo zusammen,
ich habe endlich Zeit gefunden mit dem Buch:
Jetzt lerne ich Spieleprogrammierung mit DirektX anzufangen.
Nachdem die Installation und die Konfiguration von CodeBlooks erfolgreich abgeschlossen wurde, stellte sich mir gleich das erste Problem.
Bei dem Programm "Hello World", wird in der DOS Box eben dieser Wortlaut wieder gegeben. Nutzt man jedoch die .exe Datei, die von dem Programm erzeugt wird, schließt sich die DOS Box unmittelbar danach und erwartet keine Bestätigung.
Meine Frage: Kann man eine bestätigung erzwingen, sodass ich den Schriftzug noch lesen kann und sich das Fenster erst mit dem Betätigen einer Taste schließt? Equivalent zu dem dos Befehl "pause".
Danke fürs lesen
Mordan |
|
Nach oben |
|
 |
DirectXer Dark JLI'ler

Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 05.12.2006, 16:24 Titel: |
|
|
ja, und zwar mit der Funktion cin.get(); kleines Beispiel:
CPP: | #include <iostream>
using namespace std;
int main()
{
cout << "Hello World\n";
cin.get();
return 0;
} |
Gruß DXer |
|
Nach oben |
|
 |
Otscho Super JLI'ler

Alter: 36 Anmeldedatum: 31.08.2006 Beiträge: 338 Wohnort: Gummibären-Gasse Medaillen: Keine
|
Verfasst am: 05.12.2006, 16:40 Titel: |
|
|
Das problem liegt ja darin, das das Program nur deinen Text ausgibt und dann fertig ist , sich beendet und damit die "DOS Box" schließt. Das geschiet so im Millisekundenbereich. Den eine Textausgabe ist ein relativ einfacher Befehl der.Wenn du aber ein blockierender (= auf etwas wartender) Befehl einbaust so wie DirectXer gezeigt hat blockiet der der Befehl das Program solange bis das Ereignis eingetreten ist.(In dem Fall Tastatureingabe). Wenn zu faul bist jedesmal mit der Tastatur das Programm zu beenden, kannst du auch die Funktion Sleep(Zeit_in_Millisekunden); einbauen. Bloß kann es sein, dass du dazu noch headerdateien includen musst wie windows.h oder so. Aber das wird im Buch noch viel besser und ausführlicher erklärt. Nimm am besten enfach cin.get(); oder cin >> variable; |
|
Nach oben |
|
 |
manu Super JLI'ler

Alter: 35 Anmeldedatum: 09.03.2006 Beiträge: 327 Wohnort: allgäu (DE) Medaillen: Keine
|
Verfasst am: 05.12.2006, 17:25 Titel: |
|
|
jo, die zwei oben genannten beispiele sind wohl die gängigsten..
mann kann auch z.B. mit getche, getchar etc. auf ne eingabe warten, aber im endeffekt läufts wieder auf das selbe hinaus.
genau zu dem thema hätte ich auch noch ne kleine Frage, ich denke das passt ganz gut hier rein.
Und zwar wie kann man den Eingabepuffer leeren, sodass man nicht z.B. zwei mal cin.get() am ende anhängen muss, falls noch was im puffer ist.
Ich kenne z.B flushall(); bzw. _flushall() dies scheint aber für cin.get() nicht zu wirken. cin.clear() habe ich ebenfalls schon probiert. |
|
Nach oben |
|
 |
DirectXer Dark JLI'ler

Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 05.12.2006, 18:03 Titel: |
|
|
da brauchst du 2 Methoden: std::cin.seekg() und std::cin.clear(). Die 1. setzt den Eingabepointer auf den anfang des Eingabepuffers(s. U: 1. Parameter), die zweite "reinigt" den Eingabestream. Beispiel:
CPP: | int main()
{
int v;
// variable einlesen
std::cin >> v;
// eingabepuffer leeren
std::cin.seekg(0,std::ios::end); // setze pos. [0] des Puffers auf std::ios::end
std::cin.clear();
return 0;
} |
Gruß DXer |
|
Nach oben |
|
 |
manu Super JLI'ler

Alter: 35 Anmeldedatum: 09.03.2006 Beiträge: 327 Wohnort: allgäu (DE) Medaillen: Keine
|
Verfasst am: 05.12.2006, 20:07 Titel: |
|
|
DirectXer hat Folgendes geschrieben: | da brauchst du 2 Methoden: std::cin.seekg() und std::cin.clear(). Die 1. setzt den Eingabepointer auf den anfang des Eingabepuffers(s. U: 1. Parameter), die zweite "reinigt" den Eingabestream. Beispiel:
CPP: | int main()
{
int v;
// variable einlesen
std::cin >> v;
// eingabepuffer leeren
std::cin.seekg(0,std::ios::end); // setze pos. [0] des Puffers auf std::ios::end
std::cin.clear();
return 0;
} |
Gruß DXer |
alles klar. danke  |
|
Nach oben |
|
 |
under_construction Junior JLI'ler
Alter: 36 Anmeldedatum: 12.11.2002 Beiträge: 52
Medaillen: Keine
|
Verfasst am: 05.12.2006, 20:08 Titel: |
|
|
@Mordan: Du kannst auch dein ganzes Programm von der Konsole aus starten, dann dürfte das ebenso kein problem darstellen (also Eingabeaufforderung und dann beispielsweise: C:\...\Hello_world.exe) |
|
Nach oben |
|
 |
magynhard Super JLI'ler

Anmeldedatum: 26.04.2003 Beiträge: 461 Wohnort: Wild durch die Welt ;-) Medaillen: Keine
|
Verfasst am: 05.12.2006, 22:48 Titel: |
|
|
DirectXer hat Folgendes geschrieben: | da brauchst du 2 Methoden: std::cin.seekg() und std::cin.clear(). Die 1. setzt den Eingabepointer auf den anfang des Eingabepuffers(s. U: 1. Parameter), die zweite "reinigt" den Eingabestream.
Gruß DXer |
Geht das nicht auch (einfacher) mit:
CPP: | int main()
{
// ... Quelltext
cin.sync();
cin.get();
return 0;
}
|
?
Hat jedenfalls mein Prof. behauptet.  _________________ Niemand ist hoffnungsloser versklavt als der, der fälschlich glaubt frei zu sein. [J. W. Goethe]
 |
|
Nach oben |
|
 |
RBS05 Mini JLI'ler
Anmeldedatum: 06.12.2006 Beiträge: 5
Medaillen: Keine
|
Verfasst am: 06.12.2006, 17:23 Titel: |
|
|
Bei mir tritt das problem ähnlich auf. Ich habe alles korrekt nach der Anleitung des Buches befolgt. Danach wird bei mir aber nichteinmal das Hello World angezeigt. Das Problem mit dem "kurz aufscheinen des Fensters" tritt bei mir genauso auf. Was kann ich machen? |
|
Nach oben |
|
 |
manu Super JLI'ler

Alter: 35 Anmeldedatum: 09.03.2006 Beiträge: 327 Wohnort: allgäu (DE) Medaillen: Keine
|
Verfasst am: 06.12.2006, 17:50 Titel: |
|
|
RBS06 hat Folgendes geschrieben: | Bei mir tritt das problem ähnlich auf. Ich habe alles korrekt nach der Anleitung des Buches befolgt. Danach wird bei mir aber nichteinmal das Hello World angezeigt. Das Problem mit dem "kurz aufscheinen des Fensters" tritt bei mir genauso auf. Was kann ich machen? |
Deine Frage wurde in Post 2 und 3 schon beantwortet. Einfach das Programm zum schluss noch auf eine Eingabe warten lassen oder es gleich aus der Windowskonsole starten. |
|
Nach oben |
|
 |
RBS05 Mini JLI'ler
Anmeldedatum: 06.12.2006 Beiträge: 5
Medaillen: Keine
|
Verfasst am: 07.01.2007, 20:34 Titel: |
|
|
Bin jetzt schon wieter gekommen. Ich steh jetzt aber wieder vor einem "Rätsel".
Und zwar bin ich zurzeit bei cin. Wenn ich jetzt die Eingabe habe, dann die Ausgabe und danach den code mit cin.get (); etc., dann zeigt es bei mir den Text nicht an. Was kann ich da machen? |
|
Nach oben |
|
 |
magynhard Super JLI'ler

Anmeldedatum: 26.04.2003 Beiträge: 461 Wohnort: Wild durch die Welt ;-) Medaillen: Keine
|
Verfasst am: 07.01.2007, 20:52 Titel: |
|
|
Du meinst das Programm schließt sich trotzdem?
CPP: | cin.sync();
cin.get();
|
Das cin.sync(); davor hilft auch nicht?
Oder der Text wird mittem im Programm nur nicht angezeigt?
Wie das aber dann zustande kam?
Kannst ja mal noch ein
davor machen. _________________ Niemand ist hoffnungsloser versklavt als der, der fälschlich glaubt frei zu sein. [J. W. Goethe]
 |
|
Nach oben |
|
 |
RBS05 Mini JLI'ler
Anmeldedatum: 06.12.2006 Beiträge: 5
Medaillen: Keine
|
Verfasst am: 08.01.2007, 14:17 Titel: |
|
|
Also ich kann zwar den Text eingeben. Wenn ich aber danach den Text ausgeben will, wird er nicht angezeigt. Was genau soll ich da reinschreiben?^^ |
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 08.01.2007, 14:26 Titel: |
|
|
Zeig doch am besten mal ein bisschen Code
Vielleicht ist dein Problem dann mit einem Blick gelöst... _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
 |
RBS05 Mini JLI'ler
Anmeldedatum: 06.12.2006 Beiträge: 5
Medaillen: Keine
|
Verfasst am: 08.01.2007, 16:28 Titel: |
|
|
Gut ein kleines Beispiel:
Code: | #include <iostream>
int eingabe = 0;
using namespace std;
int main(void) {
cin >> eingabe;
cout << "Ihre Eingabe ist: " << eingabe;
} |
Auch so funktioniert es nicht:
Code: | #include <iostream>
int eingabe = 0;
using namespace std;
int main(void) {
cin >> eingabe;
cout << "Ihre Eingabe ist: " << eingabe;
cin.get ( );
return 0;
} |
Zuletzt bearbeitet von RBS05 am 08.01.2007, 18:47, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
|