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

1

21.06.2008, 23:55

Frage zu ungültige Zahlen

Tag,
das ist eigentlich für mich nicht wichtig, interessiert mich doch aber ungemein.
Wie kann ich ungültige bzw Zahlen darstellen mit dem man nicht rechnen kann sondern einfach nur Kontonummern oder Verschlüsselungen darstellen?
Das soll verdeutlichen was ich mein:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>

// Hauptprogramm

int main (int argc, char *argv[])
{
    // Variablen

    int zahl = 0123;
    std::cout << zahl << std::endl;
    
    return (0);
}

Ausgabe:

Zitat

83


Bei folgendem lässt sich das ganze gar nicht mehr Kompilieren:

C-/C++-Quelltext

1
int zahl 0123456789

Fehlermeldungen:

Zitat

1>------ Erstellen gestartet: Projekt: tests, Konfiguration: Release Win32 ------
1>Kompilieren...
1>Zeiger.cpp
1>.\test.cpp(7) : error C2041: Ungültige Ziffer '8' für Basis '8'
1>.\test.cpp(7) : error C2041: Ungültige Ziffer '9' für Basis '8'
1>Das Buildprotokoll wurde unter "file://i:\Windowsprogrammierung C++\Projects\tests\tests\Release\BuildLog.htm" gespeichert.
1>tests - 2 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========


Warum ist das so bzw. wie kann ich das umgehen das des Funktioniert - ich mein nur weil du Null da vorne ist funzt das ganze nicht. Warum schnipelt der kompiler die null nich einfach ab oder machts einfach so?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

22.06.2008, 00:03

Zitat

C-/C++-Quelltext

1
int zahl 0123456789


Das kann ja schonmal garnicht gehen...
@D13_Dreinig

3

22.06.2008, 00:49

Der Compiler sagt das doch ganz klar, dass er davon ausgeht, das die Zahl im Octalszstem notiert ist.

Ne Zahl ist ne Zahl, und wie man die darstellt etwas vollkommen anderes. Entweder speicherst du die Darstellung einer Zahl in einen String oder du gibt die Zahl halt entsprechend formatiert aus, dafür sollte es für die Streams (cout, fstream usw.) ausreichende Formatierungsmöglichkeiten geben.
Lieber dumm fragen, als dumm bleiben!

Ba'el

Alter Hase

Beiträge: 409

Wohnort: Erfurt

Beruf: Student (6 FS angew. Info. - Richtung Medieninformatik)

  • Private Nachricht senden

4

22.06.2008, 09:34

eine Zahl der Basis 10 kann keine führende Null haben, daher wird diese Zahl vom Compiler, in diesem Fall, als Zahl der Basis 8 interpretiert
ansonsten siehe Vorposter, nimm 'nen String
aktuelle Projekte:
Ruby on Rails
XNA &amp; Touchless
Progr. mobiler Endgeräte (GPS Trekking)

5

22.06.2008, 22:42

Du erstellst einfach ein Klassentemplate namens Account oder so, das einen privaten Member T mValue hat. Nun kannst Du alle notwendigen Operatoren überladen (zum Beispiel =, ==, << und >>), so dass diese auf mValue zurückgreifen:

C-/C++-Quelltext

1
2
3
4
Account<int> myAccount = 10;
std::cout << myAccount << std::endl;    // Ausgabe: 10

int someInt = myAccount + 6818456;      // geht nicht, + wurde nicht überladen

int x = myAccount;     // x == 10

Damit hast Du ein Objekt, das sich wie eine Zahl verhält, womit jedoch nicht (oder wenigstens nicht ohne einen gewissen Aufwand) gerechnet werden kann.

Warum man das aber wollen sollte, ist mir nicht so ganz klar :)

6

23.06.2008, 17:47

aja, ok. das mit den strings hab ich mir schon gedacht. Aber das mit dem Octalsystem wusste ich noch nicht.
Also thx...

Werbeanzeige