Frage von Zoetrope1234, 59

C++ Typumwandlung wie geht das?

Hallo zusammen,

bin ein C++ Neuling und schreibe grad ein Programm.

Als erstes wird eine fließkomma Zahl ausgerechnet, durch potenzieren von 1.085^a dann soll abgerundet werden durch datenumwandlung auf int. Dann soll dieser ganzzahlige Wert z als char ausgegben werden.

int z;

float f = pow(1.085, a);

z = (int)f;

char Text[900]=Hier soll z stehen;

Wer kann helfen?

gruß

Antwort
von nurlinkehaende, 35

> char Text[900]=Hier soll z stehen

Wenn Du den int einfach nur dorthin kopieren würdest, dann wären es (angenommen der int ist auf dem Compiler 32 bit groß) vier char Werte (Annahme dass der char 8 bit hat) und wenn einer davon \0 ist, dann wäre ein nullterminierter string bereits zu Ende. Der Wert des int käme aber nicht zur Anzeige.

Wie immer in C/C++ sind Funktionen Deine Freunde.

Antwort
von J0T4T4, 17

Du willst ja C++ und nicht C, daher vergiss (int), sprintf() oder anderes C-Zeug.

Einfache explizite Typumwandlungen sehen in C++ folgend aus:

static_cast<zielDatentyp>(variable); //explizit

Bei Dir also:

int z = static_cast<int>(f); //explizit

in z = f; //implizit

Beides geht, der Compiler macht die Typumwandlung bei der impliziten Variante automatisch. Die explizite ist aber übersichtlicher, weshalb diese vorzuziehen ist.

Das Umwandeln einer Zahl in einen String passt nicht zu dem Niveau, und ich glaube, Du hast die Aufgabe falsch verstanden (und wäre obendrein bei dem was ich sehe mehr als unnötig). Dort steht, dass es nämlich als char, und nicht als char*/c-String ausgegeben werden soll.

Die Lösung dafür wäre dann:

char c = z; //implizit

char c = static_cast<char>(z); //explizit

std::cout << c << std::endl;

Kommentar von J0T4T4 ,

Und falls Du wirklich aus Lust und Laune die Zahl ein einen String umwandeln möchtest, schau dir mal sstreams an.

Antwort
von PROGRAM4FUN, 37

Guck dir mal die Funktion sprintf() an, die sollte dir helfen. http://www.cplusplus.com/reference/cstdio/sprintf/

Kommentar von Zoetrope1234 ,

Danke, hab ich jetzt gemacht.

Leider liefert er jetzt für



for(int a=0;a<100,a++){

char buffer[50];

int n;

n=sprintf(buffer, "%d", pow(1.085,a));

printf("%s\n",&buffer);}



unsinnig große Werte im positiven sowie im Negativen.

Was mache ich falsch?


Danke

zoetrope


Kommentar von PROGRAM4FUN ,

Versuchs mal mit:

#include <stdio.h>
double pow(double x, double y);

int main(void)
{

for(int a=0; a < 100 ; a++){
char buffer[50];
int n;
double powerval = pow(1.085, (double)a);
n = sprintf(buffer, "%d", (int) powerval);

if(n == 0){
fprintf(stderr, "ERROR ON CONVERSION TO CHAR*");
return 1;
}
printf("%s\n",buffer);

}
return 0;
}

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten