Taschenrechner mit MFC - Darstellung der Zahlen...

MCoder

Erfahrenes Mitglied
Hallo,

Strings müssen für die Berechnung in numerische Typen und wieder zurück konvertiert werden. Dafür kannst du "atoi()" und die Format-Methode von CString verwenden:
C++:
strAusgabe.Format("%d", atoi(addieren) + atoi(addieren2));
Gruß
MCoder
 

Stay Tuned

Grünschnabel
Hallo,

haha. Alles klar! Jetzt wo ichs weiß, ersscheint es mir auch logisch das man mit Strings nicht rechnen kann.

Danke für Hilfe. Von alleine wäre ich nie auf atoi() gekommen, da mir in meinem MSDEV der index fehlt und ich selbst nur beschränkt nach codes suchen kann ;)

Damit habe ich es bis jetzt geschafft jeden Operanden zu Programmieren ( naja, hat man einen, hat man alle ) doch Zeitgleich damit taucht ein neues Problem auf. Ein ziemlich banales und doch zugleich fatales.

Entweder bekommt mir die Hitze in den letzten Tagen nicht, oder... ich weiß nicht.

Addieren funktioniert, der Flag wird erkannt. Alle anderen aber anscheinend nicht.

Code:
void CTaschenrechnerDlg::OnButtonGleich() 
{
	if( PlusFlag = 1 ){

		GetDlgItemText(IDC_ERGEBNIS, addieren2);

		strAusgabe.Format("%d", atoi(addieren) + atoi(addieren2));

		SetDlgItemText(IDC_ERGEBNIS, strAusgabe);

		PlusFlag = 0;
	}


	else if( MinusFlag = 1 ){

		GetDlgItemText(IDC_ERGEBNIS, subtrahieren2);

		strAusgabe.Format("%d", atoi(subtrahieren) - atoi(subtrahieren2));

		SetDlgItemText(IDC_ERGEBNIS, strAusgabe);

		MinusFlag = 0;
	}


	else if( MalFlag = 1 ){

		GetDlgItemText(IDC_ERGEBNIS, multiplizieren2);

		strAusgabe.Format("%d", atoi(multiplizieren) * atoi(multiplizieren2));

		SetDlgItemText(IDC_ERGEBNIS, strAusgabe);

		MalFlag = 0;
	}


	else if( GeteiltFlag = 1 ){

		GetDlgItemText(IDC_ERGEBNIS, dividieren2);

		strAusgabe.Format("%d", atoi(dividieren) / atoi(dividieren2));

		SetDlgItemText(IDC_ERGEBNIS, strAusgabe);

		GeteiltFlag = 0;
	}
	
}

Auserdem kriege ich die 0 nicht weg, die bei der zweiten Zahl angezeigt wird, die ich eingebe nachdem ich einen Operanden gedrückt habe. Vielleicht hat das ja etwas damit zu tun?

So sind bei jeder Operation, auser bei der Addition, die Ergebnise gleich der zweiten eingegebenen Variablen.( Also 12 - 2 = 2 anstatt 10 oder 10 / 5 = 5 anstatt 2 )

MfG
Stay Tuned
 
Zuletzt bearbeitet:

MCoder

Erfahrenes Mitglied
Prüfung auf Gleichheit immer mit doppelten Gleichheitszeichen:
C++:
if( PlusFlag == 1 )
...
else if( MinusFlag == 1 )
...
else if( MalFlag == 1 )
...
else if( GeteiltFlag == 1 )
Gruß
MCoder
 

Stay Tuned

Grünschnabel
Hallo,

meine Güte, so ein dummer Fehler.

Auserdem ist standardmäsig alles auf 1 und somit wird, egal welchen operanden ich ausführe, immer "Plus" ausgeführt.

Jetzt habe ich erstmal alles entbuggt und das Programm funktioniert. Hab auch ein paar extras eingebaut und wollte jetzt die "Rücktaste" programmieren.

Rücktaste = letzte Zahl wird gelöscht ( also wenn man sich vertippt hat... anstatt 15 eine 155 eintippt und dann die letzte 5 löschen möchte )

Ich hab da ein paar Ideen, aber alles viel zu umständlich. Es gibt doch bestimmt einen Befehl, der die letzte eingabe rückgänig macht, oder?

Gruß
Stay Tuned
 

MCoder

Erfahrenes Mitglied
Mit einem einfachen Befehl ist es zwar nicht getan, aber der Aufwand hält sich in Grenzen:
C++:
CString strAusgabe;
GetDlgItemText(IDC_ERGEBNIS, strAusgabe);

if( strAusgabe.GetLength() > 0 )
{
   SetDlgItemText(IDC_ERGEBNIS, strAusgabe.Left(strAusgabe.GetLength() - 1)); 
}
Gruß
MCoder
 

Stay Tuned

Grünschnabel
Hallo,

so blöd das auch immer klingt, so ähnlich hatte ichs auch gemacht. Zum schluss muss nur noch der neue String in strAusgabe gespeichert werden, sonst hängt er die gelöschte Zahl nach der Eingabe einer neuen wieder hinten dran.

Naja damit bin ich mit dem Taschenrechner fertig den rest hab ich alleine geschaft... eine hübsche Kope vom Windoof Taschenrechner... :)

Danke an euch beiden die Ihr mir geholfen habt.

Mit freundlichen Grüßen
Stay Tuned