Probleme mit Zeigern

Hallo zusammen,

wieder mal ich.

Diesmal geht es um Zeiger in C++. Es ist denke ich relativ simpel, aber Google spuckt exakt dieses Beispiel leider nicht aus.

Es handelt sich um ein etwas größeres Programm. Ich weis genau wie ich vorgehen muss, nur fehlt mir ein Schritt, der mir alle weiteren ermöglicht. Ich brauche, von einen Float-Wert, die einzelnen Zahlen.

Also sagen wir ich habe die 182, dann brauche ich die 1, die 8, und die 2… Ich bin mir sicher, das funktioniert über Pointer, nur weis ich leider nicht genau wie. Wenn ich zum Beispiel die Adresse des Floatwerts nehme, bekomme ich nur die der 182, aber komme nicht auf die einzelnen Werte.

Kann mir da jemand weiterhelfen?

Danke schonmal…

MFG Bio

Hallo mein Schatz,

Also sagen wir ich habe die 182, dann brauche ich die 1, die
8, und die 2… Ich bin mir sicher, das funktioniert über
Pointer, nur weis ich leider nicht genau wie. Wenn ich zum
Beispiel die Adresse des Floatwerts nehme, bekomme ich nur die
der 182, aber komme nicht auf die einzelnen Werte.

Das geht nicht direkt, weil die Fließkommazahl ja nicht in Dezimaldarstellung gespeichert wird.
Wenn du sie aber erst mal mit sprintf() in ein char-Array schreibst, kannst du bequem auf die einzelnen Stellen zugreifen.

HTH,
Moritz

Könntest du diesen Weg näher erläutern?

Habe mit sprintf noch nicht gearbeitet. Ist das nicht ein Befehl der den Wert zwischenspeichert o.ä.?

Hallo!

Habe mit sprintf noch nicht gearbeitet. Ist das nicht ein
Befehl der den Wert zwischenspeichert o.ä.?

Hier schön mit Beispiel:
http://www.cplusplus.com/reference/clibrary/cstdio/s…

Und du bist sicher, dass du Informatiker bist?

Gruß, Jan

Was soll denn die Frage jetzt -.-…

Natürlich. Ich habe mein Fachabi in Informatik gemacht, da hatte ich u.a. Turbo Pascal und C++… Allerdings haben wir nie mit diesen Befehl gearbeitet. Ich bin jetzt im 1. Fachsemester, Angewandte Informatik. Es ging in den Jahr Wartezeitraum auch ein bisschen was verloren, das gebe ich gerne zu, doch bisher konnte ich die gestellten Aufgaben immer erfüllen. Momentan sollen wir einen eingegebenen Wert in ASCII Zeichen ausgeben… das Grundkonzept habe ich, wurde mir auch bestätigt das es so funktioniert, mir fehlt lediglich dieser Schritt… Ist das jetzt ein Grund für eine solche Frage/Aussage? Man sollte auch noch bedenken, das einige Mitstudenten noch nie c++ hatten bis zum Studium, und da noch mehr Probleme haben… Würdest du die das Gleiche fragen?

Danke dennoch für die Antwort…

Hallo!

Schritt… Ist das jetzt ein Grund für eine solche
Frage/Aussage? Man sollte auch noch bedenken, das einige
Mitstudenten noch nie c++ hatten bis zum Studium, und da noch
mehr Probleme haben… Würdest du die das Gleiche fragen?

Also die speicherinterne Darstellung von Zahlen ist Thema der 3. Doppelstunde von was auch immer einer IT-Ausbildung. Das hat mit C++ nichts zu tun. Vielleicht bin ich da altmodisch, aber wenn jemand sagt, er sei „Informatiker“ ohne Zusatz von „(FH)“ oder „staatl. gepr.“, dann hat er ein Hochschulabschluss zu haben. Sonst ist das für mich Etikettenschwindel. Naja, vielleicht haben sich die Zeiten geändert. Aber dass einer ohne jegliche Ausbildung sich Informatiker nennt …

Ok, das nur am Rande.

Wenn ich die Aufgabenstellung, die du bekommen hast, lese, könnte ich mir vorstellen, dass sowas wie sprintf u.U. nicht erlaubt ist. Denn das wäre ja dann extrem einfach gelöst. Ist vielleicht eher eine algorithmische Lösung gefordert?

Jan

Hallo nochmal!
Schön, dass du in deiner Vika jetzt auf meine Empfindlichkeiten Rücksicht nimmst. :wink:

Jan

  1. Doppelstunder von was auch immer? Achso, das ist jetzt Gesetz.

Speicherinterne Darstellung mag sein, deswegen weis ich doch noch lange nicht, wie sprintf funktioniert.

Ich habe die Angaben jetzt geändert, ich bin „Staatlich-geprüfter Fachinformatiksassistent“, und habe eingetragen „Informatikstudent“. Ich gebe zu, als ich das eingetragen habe, hab ich es etwas locker damit genommen, habe aber nie etwaiges in den Posts behauptet, sondern immer die Infos dazugeben…

Hast übrigens Recht, das die Aufgabe in Algorithmusform gefordert wird, allerdings steht es meistens auch frei (weil bepunktet) die Aufgabe anders zu lösen, dafür mit Abstrichen.

Hallo!

Speicherinterne Darstellung mag sein, deswegen weis ich doch
noch lange nicht, wie sprintf funktioniert.

Also das Beispiel aus meinem Link etwas angepasst:

char buffer [50];
float fl = 12345.67;
sprintf (buffer, „%f“, fl);

Dann steht in buffer sowas drin wie „12345.670000“ und du kannst mit buffer[1] auf z.B. die 2. Ziffer von links zugreifen.

Hast übrigens Recht, das die Aufgabe in Algorithmusform
gefordert wird, allerdings steht es meistens auch frei (weil
bepunktet) die Aufgabe anders zu lösen, dafür mit Abstrichen.

Ich fürchte, bei der Lösung oben gibt es ordentlich Abzüge.

Jan

Vielen dank, das hilft mir ordentlich weiter.

Sicher wird es ordentlich Abzüge geben, aber ich habe lieber eine Lösung und bekomme das eine oder andere Pünktchen dafür als nichts vorweisen zu können hehe.

Also danke an alle helfenden.

Ein Problem gibt es noch…

Wie prüfe ich denn, ab wann die Charzelle nur noch Zufallszahlen ausgibt, sprich ab wann Char zuende ist? Habe es mit Null probiert, das funktionierte nicht. Daraufhin habe ich mir mal ein leergelassenes Feld ausgeben lassen… Scheinbar handelt es sich dann um Zufalls-Zeichen (Kann mich auch irren)… wie überprüfe ich wie lang der Wert ist, den der User eingegeben hat?

Hallo!

Wie prüfe ich denn, ab wann die Charzelle nur noch
Zufallszahlen ausgibt, sprich ab wann Char zuende ist? Habe es

sprintf schließt die Zeichenkette mit 0 (’\0’) ab. Alles vor dem 0-Zeichen ist kein Zufall, sondern gehorcht den „Gesetzen“ der rechnerinternen Darstellung von Gleitkommazahlen. Wenn Sachen wie Mantisse, Exponent oder IEEE 754 noch nicht dran waren, soll vermutlich diese Aufgabe auf das Thema hinführen. Derweil solltest du vielleicht damit leben, dass die Ziffern zufällig aussehen.

Jan