myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   [C++] Ziffern einer Zahl in Array speichern (https://mygully.com/showthread.php?t=2698386)

Earril 07.09.12 11:23

[C++] Ziffern einer Zahl in Array speichern
 
Hallo,

ich bin gerade dabei C++ zu lernen und programmiere ein paar Übungsaufgaben.
Ich will nun für eine Aufgabe die Ziffern einer 13-stelligen Zahl, die vom Benutzer eingegeben und in eine long int Variable gespeichert wird, einzeln in einen Array speichern:



Das klappt prinzipiell auch super, allerdings nur bis zu 10-stelligen Zahlen. Wenn ich eine Zahl mit 11 Stellen oder eingebe schreibt er anscheinend willkürliche Zahlen in den Array.

Wenn mir jemand helfen könnte wäre ich sehr dankbar! :)

Hier noch 2 Screenshots:

10-stellige Zahl:

11-stellige Zahl:

HappyMike34 07.09.12 13:18

long int hat höchstwahrscheinlich 32 Bit (zumindet auf 32Bit-Systemen).

Mit 32 Bit kannst du aber nur 9 oder 10Stellige Dezimalzahlen speichern.

log10(2^32) = 9.6

Ich würde die große Zahl als String einlesen und dann die Zeichen in Ziffern umwandeln oder du verwendest
Code:

long long code;

ProgMaster 07.09.12 15:39

Du solltest auch lernen zu debuggen, denn dann fallen dir solche "Fehler" selbst auf.

Quabla 07.09.12 16:18

joa versuch es mal mit long long int, der sollte 64 bit haben

das ist aber so weit ich weis auch compilerabhängig

slahn 08.09.12 12:22

Also ich würde das ganze als std::string einlesen, dann hast du nicht das Problem mit der Speicherkapazität (beziehungsweise nicht so schnell ;)).

Thelvan 09.09.12 12:56

Richtig, String macht hier mehr Sinn, da man mit einer ArtikelNummer sowieso keine mathematischen Operationen durchführen wird.

So etwas sollte man eigentlich immer als String speichern, da es eigentlich keine Zahl ist, sondern ein String aus Ziffern.

Earril 11.09.12 06:52

Also mit long long funktionierts, danke!
Ich dachte "long int" wäre größer als "int" :rolleyes: Der Name ist aber auch irreführend.
Ich probier das ganze jetzt mal mit einem String zu lösen.

slahn 11.09.12 07:13

Hier mal eine kurze Übersicht für den [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]. Das ganze hängt eben vom verwendeten Compiler, dem verwendeten OS und der verwendeten Architektur ab ... Somit kann man sich bei C/C++/... nie ganz sicher sein, wie groß das ganze ist. Das einzige was man weiß: ein INT passt in einen LONG und ein LONG passt in einen LONG LONG. Der Rest sollte über die entsprechenden Konstanten, abgefragt und überprüft werden.

Aber mit einem String, wirst du wohl die größte Freude haben. Einen Anhaltspunkt habe ich dir im vorherigen Post eh schon gegeben.

germgerm 11.09.12 07:23

Der Name passt schon, ist eben abhängig von Plattform und Compiler.
Stimmen muss immer folgende Relation:

signed char ≤ short int ≤ int ≤ long int ≤ long long int

Bei den meisten C/C++ -Compiler kannst du den Wertebereich im File limits.h prüfen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:20 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.