JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Anfängerproblem - .exe Datei
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Mordan
Mini JLI'ler



Anmeldedatum: 03.12.2006
Beiträge: 3

Medaillen: Keine

BeitragVerfasst am: 05.12.2006, 15:44    Titel: Anfängerproblem - .exe Datei Antworten mit Zitat

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 Smile

Mordan
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 05.12.2006, 16:24    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Otscho
Super JLI'ler


Alter: 36
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 05.12.2006, 16:40    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
manu
Super JLI'ler


Alter: 35
Anmeldedatum: 09.03.2006
Beiträge: 327
Wohnort: allgäu (DE)
Medaillen: Keine

BeitragVerfasst am: 05.12.2006, 17:25    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 05.12.2006, 18:03    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
manu
Super JLI'ler


Alter: 35
Anmeldedatum: 09.03.2006
Beiträge: 327
Wohnort: allgäu (DE)
Medaillen: Keine

BeitragVerfasst am: 05.12.2006, 20:07    Titel: Antworten mit Zitat

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 Very Happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
under_construction
Junior JLI'ler


Alter: 36
Anmeldedatum: 12.11.2002
Beiträge: 52

Medaillen: Keine

BeitragVerfasst am: 05.12.2006, 20:08    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden
magynhard
Super JLI'ler



Anmeldedatum: 26.04.2003
Beiträge: 461
Wohnort: Wild durch die Welt ;-)
Medaillen: Keine

BeitragVerfasst am: 05.12.2006, 22:48    Titel: Antworten mit Zitat

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. Laughing
_________________
Niemand ist hoffnungsloser versklavt als der, der fälschlich glaubt frei zu sein. [J. W. Goethe]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
RBS05
Mini JLI'ler



Anmeldedatum: 06.12.2006
Beiträge: 5

Medaillen: Keine

BeitragVerfasst am: 06.12.2006, 17:23    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
manu
Super JLI'ler


Alter: 35
Anmeldedatum: 09.03.2006
Beiträge: 327
Wohnort: allgäu (DE)
Medaillen: Keine

BeitragVerfasst am: 06.12.2006, 17:50    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
RBS05
Mini JLI'ler



Anmeldedatum: 06.12.2006
Beiträge: 5

Medaillen: Keine

BeitragVerfasst am: 07.01.2007, 20:34    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
magynhard
Super JLI'ler



Anmeldedatum: 26.04.2003
Beiträge: 461
Wohnort: Wild durch die Welt ;-)
Medaillen: Keine

BeitragVerfasst am: 07.01.2007, 20:52    Titel: Antworten mit Zitat

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
CPP:
cout.flush();

davor machen.
_________________
Niemand ist hoffnungsloser versklavt als der, der fälschlich glaubt frei zu sein. [J. W. Goethe]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
RBS05
Mini JLI'ler



Anmeldedatum: 06.12.2006
Beiträge: 5

Medaillen: Keine

BeitragVerfasst am: 08.01.2007, 14:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 08.01.2007, 14:26    Titel: Antworten mit Zitat

Zeig doch am besten mal ein bisschen Code Wink
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
RBS05
Mini JLI'ler



Anmeldedatum: 06.12.2006
Beiträge: 5

Medaillen: Keine

BeitragVerfasst am: 08.01.2007, 16:28    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum