MessageBox mit if Anweisung



  • Hallo,
    ich habe wieder mal ein Programm das Einwandfrei funktioniert, doch manchmal ergibt der ein Nenner in diesem Programm Null. Sehr schön, aber jedes Kind weiß durch Null darf nicht dividiert werden. Ich hab vesucht, falls das geschieht (N = 0) eine AfxMessageBox erscheinen zu lassen, if (m_Dn = 0), aber es passiert nix, wenn Dn eine beliebige Zahl wir, egal ob null oder hunderttausend.

    Wie mach ich das?



  • // Schnittpunk_GOLDDlg.cpp : Implementierungsdatei
    //
    
    #include "stdafx.h"
    #include "Schnittpunk_GOLD.h"
    #include "Schnittpunk_GOLDDlg.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    
    /////////////////////////////////////////////////////////////////////////////
    // CSchnittpunk_GOLDDlg Dialogfeld
    
    CSchnittpunk_GOLDDlg::CSchnittpunk_GOLDDlg(CWnd* pParent /*=NULL*/)
    	: CDialog(CSchnittpunk_GOLDDlg::IDD, pParent)
    {
    	//{{AFX_DATA_INIT(CSchnittpunk_GOLDDlg)
    	m_A1 = 0.0f;
    	m_A2 = 0.0f;
    	m_B1 = 0.0f;
    	m_B2 = 0.0f;
    	m_C1 = 0.0f;
    	m_C2 = 0.0f;
    	m_Dn = 0.0f;
    	m_Dx = 0.0f;
    	m_Dy = 0.0f;
    	m_X = 0.0f;
    	//}}AFX_DATA_INIT
    	// Beachten Sie, dass LoadIcon unter Win32 keinen nachfolgenden DestroyIcon-Aufruf benötigt
    	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    
    void CSchnittpunk_GOLDDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	//{{AFX_DATA_MAP(CSchnittpunk_GOLDDlg)
    	DDX_Text(pDX, IDC_A1, m_A1);
    	DDX_Text(pDX, IDC_A2, m_A2);
    	DDX_Text(pDX, IDC_B1, m_B1);
    	DDX_Text(pDX, IDC_B2, m_B2);
    	DDX_Text(pDX, IDC_C1, m_C1);
    	DDX_Text(pDX, IDC_C2, m_C2);
    	DDX_Text(pDX, IDC_Dn, m_Dn);
    	DDX_Text(pDX, IDC_Dx, m_Dx);
    	DDX_Text(pDX, IDC_Dy, m_Dy);
    	DDX_Text(pDX, IDC_X, m_X);
    	//}}AFX_DATA_MAP
    }
    
    BEGIN_MESSAGE_MAP(CSchnittpunk_GOLDDlg, CDialog)
    	//{{AFX_MSG_MAP(CSchnittpunk_GOLDDlg)
    	ON_WM_PAINT()
    	ON_WM_QUERYDRAGICON()
    	ON_BN_CLICKED(IDC_DnB, OnDnB)
    	ON_BN_CLICKED(IDC_DxB, OnDxB)
    	ON_BN_CLICKED(IDC_DyB, OnDyB)
    	ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    /////////////////////////////////////////////////////////////////////////////
    // CSchnittpunk_GOLDDlg Nachrichten-Handler
    
    BOOL CSchnittpunk_GOLDDlg::OnInitDialog()
    {
    	CDialog::OnInitDialog();
    
    	// Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt
    	//  wenn das Hauptfenster der Anwendung kein Dialogfeld ist
    	SetIcon(m_hIcon, TRUE);			// Großes Symbol verwenden
    	SetIcon(m_hIcon, FALSE);		// Kleines Symbol verwenden
    
    	// ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen
    
    	return TRUE;  // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten
    }
    
    // Wollen Sie Ihrem Dialogfeld eine Schaltfläche "Minimieren" hinzufügen, benötigen Sie 
    //  den nachstehenden Code, um das Symbol zu zeichnen. Für MFC-Anwendungen, die das 
    //  Dokument/Ansicht-Modell verwenden, wird dies automatisch für Sie erledigt.
    
    void CSchnittpunk_GOLDDlg::OnPaint() 
    {
    	if (IsIconic())
    	{
    		CPaintDC dc(this); // Gerätekontext für Zeichnen
    
    		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
    
    		// Symbol in Client-Rechteck zentrieren
    		int cxIcon = GetSystemMetrics(SM_CXICON);
    		int cyIcon = GetSystemMetrics(SM_CYICON);
    		CRect rect;
    		GetClientRect(&rect);
    		int x = (rect.Width() - cxIcon + 1) / 2;
    		int y = (rect.Height() - cyIcon + 1) / 2;
    
    		// Symbol zeichnen
    		dc.DrawIcon(x, y, m_hIcon);
    	}
    	else
    	{
    		CDialog::OnPaint();
    	}
    }
    
    // Die Systemaufrufe fragen den Cursorform ab, die angezeigt werden soll, während der Benutzer
    //  das zum Symbol verkleinerte Fenster mit der Maus zieht.
    HCURSOR CSchnittpunk_GOLDDlg::OnQueryDragIcon()
    {
    	return (HCURSOR) m_hIcon;
    }
    
    void CSchnittpunk_GOLDDlg::OnDnB() 
    {
    UpdateData (TRUE);
    CString strErgebnis;
    strErgebnis.Format("%f", m_B2 * m_A1 - m_A2 * m_B1);
    SetDlgItemText(IDC_Dn, strErgebnis);
    }
    
    void CSchnittpunk_GOLDDlg::OnDxB() 
    {
    UpdateData (TRUE);
    CString strErgebnis;
    strErgebnis.Format("%f", m_B2 * m_C1 - m_C2 * m_B1);
    SetDlgItemText(IDC_Dx, strErgebnis);	
    }
    
    void CSchnittpunk_GOLDDlg::OnDyB() 
    {
    UpdateData (TRUE);
    CString strErgebnis;
    strErgebnis.Format("%f", m_C2 * m_A1 - m_C1 * m_A2);
    SetDlgItemText(IDC_Dy, strErgebnis);
    }
    
    void CSchnittpunk_GOLDDlg::OnButton2() 
    {
    UpdateData (TRUE);
    CString strErgebnis;
    strErgebnis.Format("%f", m_Dx / m_Dn);
    SetDlgItemText(IDC_X, strErgebnis);	
    strErgebnis.Format("%f", m_Dy / m_Dn);
    SetDlgItemText(IDC_Y, strErgebnis);
    }
    


  • Also das Problem liegt da ganz unten beim letzten void. wo Dx durch Dn diviedert wird:

    void CSchnittpunk_GOLDDlg::OnButton2() 
    {
    UpdateData (TRUE);
    CString strErgebnis;
    strErgebnis.Format("%f", m_Dx / m_Dn);
    SetDlgItemText(IDC_X, strErgebnis);	
    strErgebnis.Format("%f", m_Dy / m_Dn);
    SetDlgItemText(IDC_Y, strErgebnis);
    }
    


  • Hallo,

    also wenn du wirklich, wie du schreibst mit

    Flocki schrieb:

    if (m_Dn = 0),

    eine MessageBox erzeugen willst, dann darfst du dich nicht wundern, wenn keine angezeigt wird. Das "=" ist der Zuweisungsoperator, und das "==" ist der Vergleichsoperator. Wenn das nur ein Schreibfehler war, dann erkläre noch einmal, wo und wie du das eingebaut hast. Der gezeigte Code enthält zumindest kein einziges if(m_Dn == 0)...also, einbauen, und dann sehen wir weiter

    MfG



  • Da keins funktioniert hat, hab ichs später aus dem Quekkcde genommmen!
    Aber danke du hatest Recht es lag daran das ich 2 = brauch!



  • du kannst exevptions in deinem programm verwenden, die sind immer gut

    dann brachst auch kein if oder so extra machen und dein prog muesste schneller sein ( wenn mans nachmessen könnte 😉 )

    try
    {
    
    // meine berechnungen. wenn hier ein fehler gemacht wird dann wird catch ausgeführt
    }
    catch(...)   // ist zwar net so sauber, aber es reicht. (...) fängt alles auf
    {
    
    ::MessageBox("Nicht durch NULL teilen !!!!");
    
    }
    

Anmelden zum Antworten