Anfängerfrage: Große Zahlen mit cin



  • Hey,

    ich arbeite auf Hinweis einiger von euch nun ein C++ Buch durch und stehe hierbei vor einem Problem:

    using namespace std;
    
    unsigned long int max_c;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    
    	cin >> max_c;
    	cout << max_c;
    
    	cin.sync();
    	cin.get();
    	return 0;
    }
    

    Das Problem steckt anscheinend bei cin >> max_c;. Laut der limits.h (www.cplusplus.com/reference/climits/) sollte dieser Datentyp ja sehr große Zahlen speichern können ("18446744073709551615 (264-1) or greater"). Bei mir schmiert das Programm aber schon bei der Eingabe einer Zahl mit 12 Nullen ab. (Die Konsole geht ohne Fehlermeldung einfach zu). Ein manuelles Zuweisen innerhalb des Codes durch
    max_c = 1000000000000;
    funktioniert einwandfrei. Könnt ihr mir eventuell sagen, was ich falsch mache? Danke!



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (C89, C99 und C11) in das Forum C++ (auch C++0x und C++11) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    Frolo schrieb:

    Das Problem steckt anscheinend bei cin >> max_c;. Laut der limits.h (www.cplusplus.com/reference/climits/) sollte dieser Datentyp ja sehr große Zahlen speichern können ("18446744073709551615 (264-1) or greater").

    Da hast du schlichtweg falsch geguckt. Mindestmaximum für unsigned long ist 2^32-1. Es wäre auch nicht so ungewöhnlich, das tatsächlich so vor zu finden, denn das ist beispielsweise der Standard in Windowssystemen, auf denen du offensichtlich unterwegs bist.



  • Da dir große Zahlen so wichtig zu sein scheinen sieh dir mal TTmath an.


  • Mod

    (Die Konsole geht ohne Fehlermeldung einfach zu)

    Dann werden noch Zeichen im Buffer liegen. Woher die allerdings kommen, ist mir unklar, denn auch wenn du eine zu große Zahl eingegeben hast, sollten alle Ziffern extrahiert werden.

    Ein manuelles Zuweisen innerhalb des Codes durch
    max_c = 1000000000000;
    funktioniert einwandfrei.

    Ja, aber der gespeicherte Wert ist nicht der zugewiesene. Prüfe das mal.



  • nwp3 schrieb:

    Da dir große Zahlen so wichtig zu sein scheinen sieh dir mal TTmath an.

    TTmath? GMP!
    www.boost.org/libs/multiprecision/doc/html/index.html


  • Mod

    Arcoth schrieb:

    (Die Konsole geht ohne Fehlermeldung einfach zu)

    Dann werden noch Zeichen im Buffer liegen. Woher die allerdings kommen, ist mir unklar, denn auch wenn du eine zu große Zahl eingegeben hast, sollten alle Ziffern extrahiert werden.

    Aber der Stream wird in einen Fehlerzustand gesetzt.


  • Mod

    SeppJ schrieb:

    Arcoth schrieb:

    (Die Konsole geht ohne Fehlermeldung einfach zu)

    Dann werden noch Zeichen im Buffer liegen. Woher die allerdings kommen, ist mir unklar, denn auch wenn du eine zu große Zahl eingegeben hast, sollten alle Ziffern extrahiert werden.

    Aber der Stream wird in einen Fehlerzustand gesetzt.

    💡



  • Vielen Dank für eure Antworten! Es gibt den Typ "unsigned long long int", von dem ich noch nie gehört habe. Dachte leider das "unsigned long int" die größte positive Zahl darstellen kann 🙂

    Danke ihr habt mir sehr geholfen!


Anmelden zum Antworten