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


von JK (Gast)


Angehängte Dateien:

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!

von Sams X. (sams)


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.

von JK (Gast)


Lesenswert?

Danke für den äußerst hilfreichen Beitrag.

von Klaus W. (mfgkw)


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.

von ... (Gast)


Lesenswert?

Die Verwaltung der aktuellen Position ist wirklich ziemlich krank.
Aber vielleicht geht ja sowas in der Art:
1
void backspace( void )
2
{
3
  if((cursor_x + first_char) > FIRST_COLUMN)
4
  {
5
    cursor_left();
6
    delete_key();
7
  }
8
}

von JK (Gast)


Lesenswert?

Hat keiner mehr eine Idee??

Danke

von sudo (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

JK schrieb:
> Hat keiner mehr eine Idee??

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

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.

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
Noch kein Account? Hier anmelden.