www.mikrocontroller.net

Forum: PC-Programmierung Problem mit "backspace"-Funktion


Autor: JK (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute!

Ich habe folgendes Problem.

Da ich einen Zeileneditor aus einer Übungsaufgabe erweitert habe, möchte 
ich nun die Funktion "backspace()" programmieren, was bedeutet, sobald 
ich auf die Rücktaste drücke, dass dann mein Text eben 
"backspace-typisch" ab Cursorposition in Richtung Zeilenanfang gelöscht 
wird.
Wenn das Zeilenende erreicht ist, dann soll nix passieren (Cursor soll 
also nicht zurückspringen in die nächsthöhere Zeile).

Nun sitze ich schon seit zwei Stunden an dem Problem, mein Kopf wird 
immer vernagelter und jetzt geht garnix mehr :(

Könntet ihr mir bei der Umsetzung helfen?

Ich habe die Funktion mal derweil so programmiert, allerdings 
funktioniert da garnichts.

Ich schicke einmal die header-Datei und einmal die c-Datei.



Vielen Dank!

Autor: Sams Xandi (sams)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe mir den code ehrlich gesagt nicht sehr genau angeschaut (34kb!)
aber .. du darfst eins nie vergessen .. ein algorithmus ist immer
so einfach oder komplex, wie die eingesetzten Datenstrukturen.
Ich vermisse bei dir eine durchdachte Datenstruktur.
Das macht es dir so schwer festzustellten, wann eben die Zeile am Anfang
steht.

Autor: JK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den äußerst hilfreichen Beitrag.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo er recht hat, hat er recht.
Außerdem sehe ich nicht so die besondere Nähe zu Mikrocontrollern;
es sieht mehr nach Hausaufgabe aus.

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Verwaltung der aktuellen Position ist wirklich ziemlich krank.
Aber vielleicht geht ja sowas in der Art:
void backspace( void )
{
  if((cursor_x + first_char) > FIRST_COLUMN)
  {
    cursor_left();
    delete_key();
  }
}

Autor: JK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat keiner mehr eine Idee??

Danke

Autor: sudo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
if (pos>0 && text[pos-1] != '\n') pos--;

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
JK schrieb:
> Hat keiner mehr eine Idee??

Die einfachst mögliche. Du hast doch schon Hilfsfunktionen, die eine 
ganze Menge alleine können
void backspace()
{
  cursor_left();
  delete_key(),
}

Das ist das übliche Verhalten von Backspace und nicht irgendwas mit 
löschen bis zum Zeilenende oder vom Zeileananfang oder dergleichen.

> Wenn das Zeilenende erreicht ist, dann soll nix passieren
> (Cursor soll also nicht zurückspringen in die nächsthöhere Zeile).

Na dann frag halt ab, ob der Cursor schon am linken Rand ist. Ist doch 
alles da!

Beitrag "Re: Problem mit "backspace"-Funktion"


> Hat keiner mehr eine Idee??
Doch: Programmieren lernt man nicht, indem man andere seine Hausaufgaben 
machen lässt. Und Analyse von vorhandenem Code ist nun mal Teil davon. 
Hat man die Funktionsweise erst einmal analysiert und die Zusammenhänge 
herausgelesen (Hinweis: Papier und Bleistift und eine Skizze der 
Gegebenheiten sind ausgezeichnete Hilfsmittel) dann ist es nicht mehr 
schwer. Nur machen muss man das. Am besten selber.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.