Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

61

11.07.2007, 07:36

Re: Oder so

Zitat von »"NicoWe"«

So geht's auch

Quellcode

1
2
3
4
5
6
7
void wait ()
{
std::cout << "Enter druecken";
std::cin.clear();   
std::cin.ignore(std::cin.rdbuf()->in_avail());      
std::cin.get();
}


Das ist kein guter Gedanke und zudem ein höchst unportabler Ansatz.
@D13_Dreinig

NicoWe

Treue Seele

Beiträge: 126

Wohnort: Bielefeld / NRW

  • Private Nachricht senden

62

11.07.2007, 12:26

Kein guter Gedanke: Es funktioniert und bis jetzt hab ich noch keinen Fehler hinterhergeschmissen bekommen
unportabel: OK, da muss ich dir recht geben, aber in einer Engine wär's (vielleicht) als Inline ganz OK. :?
Erfolg ist die Fähigkeit, von einem Misserfolg zum anderen zu gehen,
ohne seine Begeisterung zu verlieren.
-Winston Churchill-

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

63

11.07.2007, 12:29

Re: :-)

Zitat von »"chris1982nrw"«


Mit was ich Probleme haben werde beim "Grundlagenlernen C++"
is das, das ich am Anfang so viele "für mich noch unnötige Sachen" lernen
muss, bis ich überhaupt in den vielleicht für mich relevanteren Bereich
"Fortgeschrittene" gelangen kann.

Leider kann ich heute noch nicht sehen, was ich mal wirklich alles
für eine Spieleprogrammierung benötigen werde und was nicht.

Geh einfach mal davon aus, dass die Sachen die du nicht brauchst lediglich einen verschwindend geringen Anteil dessen darstellen, was du lernst. Natürlich musst du für ein 2D / 3D Game nicht mehr std::cout verwenden oder so, aber das Prinzip hinter std::cout solltest du trotzdem halbwegs verstanden haben, da z.b. die Filestreams (also Arbeit mit externen Dateien) sehr ähnlich wie std::cin / std::cout arbeiten und mit Dateien hast du auch in einem 3D-Spiel noch jede Menge zu tun ;)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

64

11.07.2007, 12:55

Zitat von »"NicoWe"«

Kein guter Gedanke: Es funktioniert und bis jetzt hab ich noch keinen Fehler hinterhergeschmissen bekommen
unportabel: OK, da muss ich dir recht geben, aber in einer Engine wär's (vielleicht) als Inline ganz OK. :?


Jep, es funktioniert aber es ist nicht gewährleistet das es funktioniert. Das macht es auch unportabel und da hilft kein inline (kA was du damit portabler machen willst). in_avail() muss ganz einfach nicht die Zahl der restlichen Bytes im Konsolenpuffer zurückgeben.

Ergo: Andre Lösung suchen wenn man wirklich die Funktionalität gewährleisten möchte.
@D13_Dreinig

NicoWe

Treue Seele

Beiträge: 126

Wohnort: Bielefeld / NRW

  • Private Nachricht senden

65

11.07.2007, 14:51

wie wär's mit getch()?
Erfolg ist die Fähigkeit, von einem Misserfolg zum anderen zu gehen,
ohne seine Begeisterung zu verlieren.
-Winston Churchill-

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

66

11.07.2007, 14:56

Zitat von »"NicoWe"«

wie wär's mit getch()?


Das ist auch nich portabel, aber funktioniert wenigstens verlässlich! ;-) Eine C++ Lösung die funktionieren sollte wäre:

C-/C++-Quelltext

1
2
3
std::cin.clear(); // Fehlerflags löschen

std::cin.ignore( std::numeric_limits< std::streamsize >::max(), '\n' ); // Versuchen Konsolenpuffer zu leeren

std::cin.get(); // Eingabe abwarten
@D13_Dreinig

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

67

11.07.2007, 15:02

Könntet ihr bitte diese Diskussion beenden?
Ich hab mal Tage lang daran gesessen, wirklich sicher zu gewährleisten, dass der Eingabebuffer leer ist. Irgendwann hab ich aufgegeben und mir eine komplett eigene Funktion geschrieben, mit der ich das Einlesen von std::cin unabhängig gemacht habe.

Solange man einfache Programme schreibt reicht es, ein std::cin.get() ans Ende zu schreiben, später muss man sehen wo man bleibt.
Da auch mehrere Zeilenumbrüche im Buffer hängen geblieben sein können ist es keine sichere Lösung, bis zum Abbruchzeichen '\n' zu ignorieren.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

68

11.07.2007, 15:11

Zitat von »"grek40"«


Da auch mehrere Zeilenumbrüche im Buffer hängen geblieben sein können ist es keine sichere Lösung, bis zum Abbruchzeichen '\n' zu ignorieren.


Aber nur wenn du was in den Puffer fütterst. Ansonsten ist die Konsoleneingabe Zeilenweise und die Version ist schon verlässlich. Aber was solls... Ende der Diskussion! ;-)
@D13_Dreinig

NicoWe

Treue Seele

Beiträge: 126

Wohnort: Bielefeld / NRW

  • Private Nachricht senden

69

11.07.2007, 16:04

OK, Frieden ;)
Erfolg ist die Fähigkeit, von einem Misserfolg zum anderen zu gehen,
ohne seine Begeisterung zu verlieren.
-Winston Churchill-

Werbeanzeige