Prozentrechner spinnt rum
-
999999999999
Zu Groß. int kann nur (ganzzahlige) Werte im Invervall [-2.147.483.648, 2.147.483.647] speichern. Alles andere führt zu vorzeichenbehafteten Überläufen; das resultiert in undefiniertem Verhalten.
Und was bitte erwartest du, wenn du einen Buchstaben eingibst?
-
Das eine Fehlermeldung kommt
-
Prozento schrieb:
Das eine Fehlermeldung kommt
Das musst du selber programmieren.
-
Wie kann man denn einen Filter erstellen?
-
Prozento schrieb:
Wie kann man denn einen Filter erstellen?
Gar nicht (so).
Es wird versucht eine Zahl einzulesen. Schlägt das fehl - weil z.B. ein Buchstabe eingegeben wurde - wird abgebrochen und der Stream in einen Fehler Zustand gesetzt. Mitif (!cin) cerr << "error";kannst du das abgfragen. Da der operator<< vom Stream, allerdings den Stream selber wieder zurückgibt, kannst du auch kürzer:
if (cin >> val) // ok else // fehleroder so schreiben. Auch Schleifen sind möglich:
while (!(cin >> val)) // solange das Einlesen nicht klappt { cin.clear(); // resette Fehlerzustand cin.ignore(numeric_limits<streamsize>::max, '\n'); // s.u.; erfordert Header limits }Allerdings musst du eine Sache beachten:
Wenn du z.B. abc eingibst, merkt der Stream nach dem Einlesen von a, das da etwas nicht stimmt und bricht ab. Wenn nun erneut versucht einzulesen, ist das nächste Zeichen ein b und er bricht erneut ab. Um das zu vermeiden, wird ignore aufgerufen. ignore nimmt im ersten Parameter die maximale Anzahl an Zeichen, die ignoriert werden numeric_limits<streamsize>::max ist der höchste mögliche Wert von streamsize und bedeutet so viel wie unendlich, der zweite Parameter ist das Zeichen, bei dem gestoppt werden soll.cin.ignore(numeric_limits<streamsize>::max, '\n');überliest alles bis zum nächsten Newline.
BTW: Nutz keine globalen Variablen (besonders nicht für so etwas)!
-
Nathan schrieb:
BTW: Nutz keine globalen Variablen (besonders nicht für so etwas)!
Auf goto würde ich auch verzichten. Hier einfach durch eine Endlosschleife ersetzen.
-
Arcoth schrieb:
int kann nur (ganzzahlige) Werte im Invervall [-2.147.483.648, 2.147.483.647] speichern. Alles andere führt zu vorzeichenbehafteten Überläufen; das resultiert in undefiniertem Verhalten.
Optimist.
Schau mal bei http://www.cplusplus.com/reference/climits/ oder http://en.cppreference.com/w/cpp/language/types wo die Grenzen für int mindestens liegen.
-
Ich habe direkt Annahmen über seine Plattform gemacht und ihm dementsprechend geantwortet.
-
Arcoth schrieb:
Ich habe direkt Annahmen über seine Plattform gemacht und ihm dementsprechend geantwortet.
Endlich mal einer mit einer funktionierenden Glaskugel

Oder nimmst du Hühnerknochen?

-
Bei dieser Annahme reicht auch eine Glaskugel aus dem Supermarkt, um richtig zu liegen. Einen nicht-32-Bit-int muss man schon ganz schön lange suchen.