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


  • Mod

    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!


Anmelden zum Antworten