C-Knopf im Taschenrechner programmieren?

1 Antwort

Warum setzt du nicht einfach container.innerHTML auf ein Leerstring?

Außerdem müsstest du noch die Zwischenspeicher für erstes Argument, Operator und zweites Argument sowie das Eingabefeld leeren.

Viele Taschenrechner haben aber auch eine [C]- und eine [CE]-Taste, wobei die [C]-Taste nur das Eingabefeld löscht, das erste Argument und den Operator aber behält, und die [CE]-Taste eine komplett neue Rechnung beginnt (also das tut, was ich oben beschrieben habe).

Snipermike 
Fragesteller
 03.11.2022, 14:03

Sorry ich kenn mich noch nicht so aus mit Javascript und HTML, könntest du das etwas, naja einfacher erklären

0
PWolff  03.11.2022, 14:26
@Snipermike

Ein HTML-Knoten hat drei Eigenschaften, die als Zeichenkette (string) ausgelesen und gesetzt werden können: innerText, innerHTML und textContent. Bei einem Taschenrechner hat man immer dieselbe Formatierung in den Ausgabefeldern, da bietet sich innerText an - das kümmert sich im Gegensatz zu den beiden anderen überhaupt nicht um irgendwelche Formatierungen: https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_node_textcontent_innerhtml_innertext (bzw., wenn du Englisch nicht gut genug verstehst: https://wiki.selfhtml.org/wiki/JavaScript/DOM/Node/textContent)

Ein input-Element hat zusätzlich noch die value-Eigenschaft, die bei einem Text-input ebenfalls ein string ist: https://www.w3schools.com/jsref/prop_text_value.asp. Das wäre dann die Eigenschaft der Wahl.

Statt

    let remove = clrs(container.innerHTML);
    container.innerHTML = remove;

würde ich nehmen

    container.value = "";

(Was die clrs-Methode zurückgibt - wenn überhaupt etwas - wüsste ich nicht.)

-----

Ein einfacher Taschenrechner funktioniert ja üblicherweise so:

  • Eingabe der ersten Zahl (durch den Benutzer)
  • Eingabe des Operators (+, -, *, /) (durch den Benutzer)
  • Die erste Zahl und der Operator werden in den Speicher im Hintergrund übernommen (durch den Taschenrechner)
  • Eingabe der zweiten Zahl (durch den Benutzer)
  • Eingabe von "=" oder eines weiteren Operators (durch den Benutzer)
  • Merken, ob "=" oder ein weiterer Operator eingegeben wurde und ggf. welcher Operator (durch den Taschenrechner)
  • Berechnung von dem, was herauskommt, wenn man den Operator auf die Zahl aus dem Hintergrund und die Zahl im Eingabe-Anzeigefeld anwendet (durch den Taschenrechner)
  • Ausgabe dieses Ergebnisses ins Eingabe-Anzeigefeld (durch den Taschenrechner)
  • Falls die letzte Eingabe "=" war, zurück in den Grundzustand (wobei das aktuelle Ergebnis stehen bleibt, bis der Benutzer eine neue Zahl oder einen Operator eingibt)
  • Sonst (der Benutzer hat einen Operator eingegeben) weiter wie oben nach der Eingabe des Operators (3. Schritt)

Das heißt, du brauchst an Speicherzellen:

  • das Ein-/Ausgabefeld
  • einen Merker für den Operator (bzw. "kein Operator")
  • einen Merker für die erste Zahl

Der Name "resultarea" scheint darauf hinzudeuten, dass du Eingabefeld und Ausgabefeld trennst. Das ist auch möglich. Hast du vielleicht zwei Eingabefelder? Dann sieht der Anwender auch die Zahl im Hintergrund. Auch möglich - ein bisschen mehr Anzeigefläche kostet heute ja nicht viel. (Als die ersten Taschenrechner auf den Markt kamen, sah das noch ganz anders aus.)

Auch den eingegebenen Operator könntest du in einem Anzeigefeld anzeigen lassen - das tun auch viele Taschenrechner.

[C] würde dann nur das aktuelle Eingabefeld leeren.

[CE] würde dann beide Eingabefelder und das Operatorfeld leeren (bzw. das Eingabefeld, den Merker für die Zahl und den Merker für den Operator im Hintergrund) und die Einfügemarke ("Cursor") ggf. in das erste Eingabefeld setzen.

(Oder soll der Taschenrechner nur auf Klicken auf die Zifferntasten reagieren?)

0