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

21

18.10.2007, 16:35

Ehm naja wenn er den Inhalt des Buffers von cin halt nicht in den gewünschten Typ "formen" kann, wird das failbit gesetzt (setstate(failbit) usw ...). Dann gibt es bei Streams den schönen operator! ... kann man in dem Fall klasse gebrauchen :) (std::ios::operator!)

C-/C++-Quelltext

1
if (!(std::cin >> x)) std::cerr << "Falsche Eingabe!" << std::endl;
... soo geht das natürlich nur, weil der Stream-Operator eine std::istream Referenz zurück gibt! (std::istream::operator>>) Sonnst müsste man machen:

C-/C++-Quelltext

1
2
std::cin >> x;
if (!std::cin) std::cerr << "Falsche Eingabe!" << std::endl;
...
So jetzt ist ein Fehler aufgetreten ... damit ist unser Stream solange unbrauchbar, bis wir den wegschaffen. Dazu muss einmal per std::cin.clear() das failbit|badbit entfernt werden (std::ios::clear) und per std::cin.ignore alles aus dem Buffer geschoben werden (std::istream::ignore), was drin ist.

C-/C++-Quelltext

1
2
3
4
5
6
7
double value;
do
{
    std::cout << "Value: ";
    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
} while (!(std::cin >> value));
... so fängst du falsche Eingaben ab und dein Stream ist danach immer noch in Ordnung :)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

22

18.10.2007, 16:59

Zitat von »"grek40"«

Zitat von »"Fred"«

sprecht ihr von dem Windows-Taschenrechner?

Jeder Taschenrechner der über die vier Grungrechenarten hinausgeht topt den.

Immerhin kommt er auch mit Zahlen zurecht, die über ein long long hinausgehen - das sollte man nicht unterschätzen^^

Der Taschenrechner von Windows rechnet sogar mit unendlicher Genauigkeit, solange man nur +-*/ benutzt;) Versuch das mal nachzumachen

Ciao
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

SirForce

Alter Hase

Beiträge: 802

Wohnort: Süddeutschland

  • Private Nachricht senden

23

18.10.2007, 17:28

@Helmut: Und kannst du auch sagen wie der das macht... den er muss sich ja mindestens zwei Variablen bemächtigen (Eingabe1 & Eingabe2)... und von welchen Typ sollen die sein, das er mit "unendlicher Genauigkeit" rechnet (die es strenggenommen nicht gibt, da alles endlich ist!!!).
Nichts behindert so sehr die Entwicklung der Intelligenz wie ihre vollständige Abwesenheit.

Michail Genin

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

24

18.10.2007, 17:35

@ SirForce

Ich denke das ist eher im Sinne von 1/3 intern als 1/3 und nicht als 0.333333333333333333333333333333333333 darzustellen - solange man 'endliche' Eingaben hat kann man auch immer eine Darstellungsform finden, in der noch keine Genauigkeit verloren geht und dann erst für die Ergebnisausgabe runden.

SirForce

Alter Hase

Beiträge: 802

Wohnort: Süddeutschland

  • Private Nachricht senden

25

18.10.2007, 19:00

Achso.... na, da muss erst mal einer drauf kommen :D
Nichts behindert so sehr die Entwicklung der Intelligenz wie ihre vollständige Abwesenheit.

Michail Genin

26

23.10.2007, 21:21

Hmm find ich net so gut da du kein ENUM verwendest.

*mapa

Werbeanzeige