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

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

1

03.06.2015, 16:42

TCHAR in float umwandeln (win32-Anwendung)

Hallo Leute,

ich möchte ein Programm schreiben, wobei man Zahlen eingibt und der Computer anschließend damit rechnet. Mein Problem: Ich bekomme die Eingaben bzw. das Endergebnis nicht richtig umgewandelt. Habe ich den falschen Befehl dazu verwendet? (Funktion dazu in Zeile 213)

Danke im Voraus!
»cojo2015« hat folgende Datei angehängt:
  • Main.cpp (7,43 kB - 85 mal heruntergeladen - zuletzt: Gestern, 01:10)

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »cojo2015« (03.06.2015, 16:50)


Tobiking

1x Rätselkönig

  • Private Nachricht senden

2

03.06.2015, 17:06

Die Funktion _wtoi ist wstring to int. Die Funktioniert nicht in die andere Richtung. Dafür ist _itow (int to wstring).

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

3

03.06.2015, 17:21

@Tobiking Danke für die schnelle Antwort. Wie würde denn der Komplette Befehl aussehen? Mit der Hilfe von Visual Studio komme ich nicht ganz klar... :dash:

Hello_Kitty!

unregistriert

4

03.06.2015, 17:31

Bei der Eingabekonvertierung mit _wtoi verwirfst du außerdem den Nachkommaanteil, das ist ein Problem falls du nach Kilogramm und Metern verlangst, wonach es in der folgenden Berechnung aussieht. Die jeweils passenden Konvertierungsfunktionen findest du in der MSDN unter Data Conversion Routines.

Und noch ein kleiner Tipp:

C-/C++-Quelltext

1
2
3
    fGewicht = _wtoi (szTextGewicht);   // Gewicht
    fGröße   = _wtoi (szTextGröße);     // Größe
    iAlter   = _wtoi (szTextAlter);     // Alter

Statt in den Kommentaren den Variablennamen zu wiederholen könntest du hier die Einheiten vermerken. Oder noch besser schreibst du sie direkt mit den Variablennamen "fGrößeInKg" und sparst dir die Kommentare ganz. Das mit den Umlauten ist auch so eine Sache, aber solange du noch "in Deutsch" programmierst kann man darüber wohl hinwegsehen...

5

03.06.2015, 17:36

Genau, der Nachkommateil wird abgeschnitten, da diese Funktionen nur soviele ziffern einlesen, bis ein anderes Zeichen kommt, welches keine Ziffer ist.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Roflo« (03.06.2015, 17:42)


cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

6

03.06.2015, 17:47

Danke für die Antworten, aber wie heißt der Befehl, um "fBMI" in "szBMI" zu konvertieren? Auf dem Link zu Microsoft steht kein Befehl, um einen float in einen string zu konvertieren, oder bin ich zu dumm?
Tut mir leid, wenn ich es nicht auf die Reihe bekomme. Bin halt zu doof...

7

03.06.2015, 17:52

Am besten nimmst du stringstreams, die sind dazu auch noch portabel, im Gegensatz zu allen Dingen, die mit einem '_' beginnen (auf die Standardbibliothek bezogen).

Quellcode

1
2
3
4
5
#include <sstream>
std::basic_stringstream<TCHAR> Stream;
Stream << floatzahl;
TCHAR buffer[256];
Stream >> buffer;

Kannst dich ja etwas mit den Dingern beschäftigen. Dumm ist hier übrigens keiner ;)

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

8

03.06.2015, 18:03

@Roflo Danke dafür. Und wie kann ich jetzt dem BMI ausgeben? Wenn ich jetzt das Chilod-Fenster erzeuge und dann als dritten Parameter (nach TEXT("STATIC")) "fBMI" angebe, bekomme ich eine Fehlermeldung:
error C2664: 'CreateWindowExW': Konvertierung des Parameters 3 von 'float' in 'LPCWSTR' nicht möglich.

Danke für die Bemühungen um mich...

9

03.06.2015, 18:12

Du versuchst einen float in einen const wchar_t*, also einen Zeiger auf einen Buffer, der den Fensternamen in Form von wchar_ts enthält, umzuwandeln. Das geht natürlich nicht. Du musst den float also wieder in einen wchar_t(=TCHAR, jedenfalls wenn Unicode eingeschaltet ist)-Buffer pressen. Wie das geht steht oben.

Hello_Kitty!

unregistriert

10

03.06.2015, 18:16

Auf dem Link zu Microsoft steht kein Befehl, um einen float in einen string zu konvertieren

Die Funktionen auf der verlinkten Seite nehmen tatsächlich ein double, funktionieren aber auch mit float, dann wird dein float vor dem Aufruf erst in ein double konvertiert. Wahrscheinlich hast du sie deshalb nicht bemerkt...

Neben der von Roflo genannten Möglichkeit gibt es in der C-Standardbibliothek übrigens auch alle benötigten Konvertierungsfunktionen für deinen Zweck, die ebenso portabel sind aber sich etwas bequemer verwenden lassen.

Werbeanzeige