Gültigkeit von Membervariablen
-
Hallo,
ich habe eine Dialoganwendung zur Flächenberechnung erstellt.
Es gibt die Membervariablen:
public: double m_dLaenge; double m_dBreite; double m_dFlaeche;
Und in der Funktion OnFlaecheberechnen gebe ich diese aus. Komischerweise haben die Länge und Breite seltsame Werte, als wären sie nicht gesetzte lokale Variablen (siehe Screenshot):
http://www4.pic-upload.de/28.07.10/pocu78ewoo4y.png
Die eigentliche Flächenberechnung stimmt dann aber wieder und das ist seltsam...
Der Quellcode von OnFlaecheberechnen ist:
// Daten von den Feldern holen GetDlgItemText ( IDC_BREITE , m_strBreite ) ; m_dBreite = atof ( m_strBreite ) ; GetDlgItemText ( IDC_LAENGE , m_strLaenge ) ; m_dLaenge = atof ( m_strLaenge ) ; // Fläche berechnen m_dFlaeche = m_dBreite * m_dLaenge ; m_strFlaeche . Format ( "%3.2f" , m_dFlaeche ) ; SetDlgItemText ( IDC_FLAECHE , m_strFlaeche ) ; // Kontrollausgabe CString helpstr; helpstr.Format("B=%d, L=%d, F=%d",m_dBreite,m_dLaenge,m_dFlaeche); helpstr+=" (strB="+m_strBreite+", strL="+m_strLaenge+", strF="+m_strFlaeche+")"; CListBox * pLB = (CListBox*) GetDlgItem ( IDC_PROTOKOLL ) ; pLB -> InsertString ( 0 , helpstr ) ; // Zweite Ausgabe helpstr = m_strBreite + " x " + m_strLaenge + " = " + m_strFlaeche ; //CListBox * pLB = (CListBox*) GetDlgItem ( IDC_PROTOKOLL ) ; pLB -> InsertString ( 0 , helpstr ) ;
Wenn jemand das Mysterium aufklären könnte, wäre ich sehr dankbar
Gruß Samsara
-
Das kann nicht gehen. Format benutzt %d (also int) Du pushst aber doubles auf den Stack.
Verwende die richtigen Format-Platzhalter (%e) und dann geht es auch.
http://msdn.microsoft.com/en-us/library/56e442dc.aspx
http://msdn.microsoft.com/en-us/library/hf4y5e3w.aspx
-
Vielen Dank, jetzt klappt es einwandfrei!
Kann sowas theoretisch immer passieren, wenn man double-Variablen liefert und Integer-Variablen erwartet werden?
Würde das Abhilfe schaffen?
helpstr.Format("B=%i, L=%i, F=%i",(int)m_dBreite, (int)m_dLaenge, (int)m_dFlaeche);
Btw: Diese Übersicht hab ich bisher vergeblich in der Hilfe gesucht
-
helpstr.Format("B=%i, L=%i, F=%i",(int)m_dBreite, (int)m_dLaenge, (int)m_dFlaeche);
Damit verlierst du eventuell vorhandene Kommastellen deiner Double-Werte.
-
Ok, vielen Dank für die schnelle Hilfe!