| 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, 14: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, 15: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: 37
 Anmeldedatum: 31.08.2006
 Beiträge: 338
 Wohnort: Gummibären-Gasse
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 05.12.2006, 15: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: 36
 Anmeldedatum: 09.03.2006
 Beiträge: 327
 Wohnort: allgäu (DE)
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 05.12.2006, 16: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, 17: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: 36
 Anmeldedatum: 09.03.2006
 Beiträge: 327
 Wohnort: allgäu (DE)
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 05.12.2006, 19: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: 37
 Anmeldedatum: 12.11.2002
 Beiträge: 52
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 05.12.2006, 19: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, 21: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, 16: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: 36
 Anmeldedatum: 09.03.2006
 Beiträge: 327
 Wohnort: allgäu (DE)
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 06.12.2006, 16: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, 19: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, 19: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, 13: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: 38
 Anmeldedatum: 14.03.2003
 Beiträge: 3122
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 08.01.2007, 13: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, 15: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, 17:47, insgesamt einmal bearbeitet
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		|  |