Hallo Hab ne Frage. Möchte ein kleiner Rechner mit C++-Programmieren (MFC). Hab noch nicht grosse Ahnung von C++, gibt es Tutorials, etc... die ihr mir Vorschlagen könnt? Besten Dank für die Mithilfe Cedric
Guten Tag bekomme immer einen Fehler: Ergebnis undeclared identifier. Mein Code: void CCalculatorDlg::OnEight() { UpdateData(true); Ergebnis=Ergebnis*10+8; UpdateFata(false); } Wie soll ich Ergebnis deklarieren? Griss Cedric
int Ergebnis = 0; oder int Ergebnis; Dann gibt es bei mir keine Zahl aus auf dem Taschenrechner
Tja, Du musst natürlich Ergebnis schon mit dem Inhalt des Textfeldes verknüpfen, das zur Anzeige verwendet wird.
Guten Tag ich bins wieder Hab alle zahlen gemacht funktioniert auch toll, nun möchte ich wissen wie man das Display (Anzeige) wieder löscht kann man das einfach mit delete Machen? geht bei mir nicht. Kann jemand mit helfen? Gruss Cedric
Irgendwie scheinst du noch nicht verstanden zu haben, wie in der MFC Dialoge und Dialogelemente funktionieren. Mit dem Wizard verknüpfst du dein Anzeigeelement (in diesem Fall wohl eine Textbox) mit einer normalen Variablen. UpdateData macht den Transfer von der Variablen in die Textbox und umgekehrt. In deinem Fall ist die Variable eine normale int Variable. D.h. wenn du in deiner Anzeige (der Textbox) eine 0 drinnen stehen haben willst, dann weist du die 0 deiner Variablen zu und rufst UpdateData auf. Willst du in deiner Textbox die Anzeige 123 haben, dann weist du deiner Variablen 123 zu und rufst UpdateData auf. Da du deine Textbox mit dem Wizard mit einer int Variablen verknüpft hast, ist es auch nicht möglich die Textbox leer zu lassen. Eine int Variable enthält immer eine Zahl auch wenn die Zahl 0 ist. Daher enthält auch das Anzeigeelement (also die Textbox) immer eine Textdarstellung einer Zahl und kann nicht 'leer' sein.
Bin eben ein Anfänger auf diesem Gebiet. Hab es nicht mit UpdateData usw. gemacht. Aber beim Initialisieren habe ich mein Display auf null gesetzt und beim Button Clear soll es ja dasselbe machen. Also hat sich meine Frage gelöst. Danke
Hab noch ne andere Frage: Die Zahlen hab ich so geschrieben: void CCalculatorDlg::OnOne() { m_dValue *= 10; m_dValue += 1; CString strTemp; strTemp.Format("%f", m_dValue); m_txtDisplay.SetWindowText(strTemp); } Nun hab ich gedacht, der Punkt ginge auch so: void CCalculatorDlg::OnPoint() { m_dValue *= 10; m_dValue += .; CString strTemp; strTemp.Format("%f", m_dValue); m_txtDisplay.SetWindowText(strTemp); } Geht aber leider nicht, kann mir jemand sagen warum, oder bessere Lösungsvorschläge geben? Gruss Cedric
Cedric wrote: > Wie kann ich es dann anders lösen? Wie kannst du WAS anders lösen. Diese Zeile ergibt absolut keinen Sinn. Da kann man noch nicht mal raten, was du denn eigentlich erreichen möchtest. . ist nun mal keine Zahl. > Gibt sicher andere Lösungsvorschläge Ne Menge. Die erste davon ist: Kauf dir ein Einsteigerbuch für MFC. Klar kann man einen Update einer Textbox so machen, wie du das gemacht hast. In Ausnahmefällen wird man das sogar so machen. Aber im Regelfall wird man das so nicht machen, sondern sich eine Value-Variable vom Wizard auf die Textbox mappen lassen.
Wollte mir schon lange ein Buch über c++ kaufen, hast du gute Ratschläge welches das richtige wäre?
Für C++ ist immer noch der Klassiker zu empfehlen: Stroustroup "The C++ Programming Language" Keine Ahnung ob es davon eine deutsche Ausgabe gibt. Für MFC hab ich jetzt nichts in petto. Aber in der nächstgelegenen Buchhandlung deiner Wahl wird sich sicher was im Regal finden. Zu deinem Problem: Bleib drann, ich glaube ich habe jetzt verstanden, was du erreichen möchtest. In 10 bis 15 Minuten wirst du dazu einen Beitrag vorfinden.
Zu deinem Problem. Du möchtest Kommazahlen über 10 Buttons eingeben. Gleichzeitig mit dem Drücken einer Taste baust du auch die Zahl zusammen. Wie machst du das? Nun, du benutzt den Zusammenhang, dass um an eine Zahl x eine neue Dezimalstelle y anzuhängen, du das ganze als 10 * x + y rechnen kannst. Bsp. aus 12 und der nächsten Ziffer 3 wird so 12 * 10 -> 120 und dazu noch 3 dazu 120 + 3 -> 123 Aber: geht das auch bei Nachkommastellen? Nein. Das geht so nicht! Aber wie geht das bei Nachkommastellen? um an die Zahl 12 eine 3 als erste Nachkommastelle anzuhängen, musst du rechnen: 12 + 0.3 du musst also aus den 3 zuerst mal 0.3 machen. Warum 0.3? Weil wir über die erste Nachkommastelle reden. 12 + 0.3 -> 12.3 Was ist, wenn da jetzt noch eine Stelle drankommt, sagen wir 5 12.3 + 0.05 -> 12.35 Aus den 5 mussten also 0.05 werden. Da ist aber ein Muster drinnen. Für die erste Nachkommastelle musste die einzelne Ziffer durch 10 dividiert werden, für die nächste durch 100, für die nächste werden es dann 1000 sein, etc. D.h. du musst bei der Behandlung der Ziffern-Tastendrücke unter- scheiden, ob diese Ziffer in den Vorkomma-Anteil wandert oder ob es sich um eine Nachkommastelle handelt. Woher weist du, ob du vor dem Komma bist oder dahinter? Wenn die Eingabe einer Zahl beginnt, dann gibt der Benutzer immer Vorkommastellen ein. Durch Drücken der Punkt-Taste teilt der Benutzer dem Programm mit: Vorkommaanteil beendet, ab hier beginnt der Nachkommaanteil. Die Punkt Taste ist also nichts weiter als ein Umschalter (den du dir als bool Variable in deinem Dialog anlegst), der entscheidet was mit einem Ziffern-Tastendruck zu geschehen hat: Vorkomma: Neue Zahl = Alte Zahl * 10 + Ziffer Nochkomma: Neue Zahl = Alte Zahl + ( Ziffer / StellenFaktor ) StellenFaktor = 10 * StellenFaktor Punkt: Umschalten Vorkomma -> Nachkomma StellenFaktor = 10 Übrigens denke ich nicht, dass es so elegant ist, die Zahl direkt bei der Eingabe zusammenzubauen. Ich würde das eher so machen, das bei den Ziffern und Punkt Tasten einfach nur ein Zeichen an einen String angehängt wird. Wenn dann die tatsächliche Zahl gebraucht wird, dann hol ich mir diesen Text von der Anzeige und wandle ihn erst dann in einem Rutsch in eine double Zahl um. Das vermeidet dann auch eine Menge Probleme, die zwischendurch durch Rundunsfehler bei der Zahl-Berechnung und zwischenzeitlichen Anzeige auftreten.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.