Probleme mit der Programmierung der Funktion der Backspacetaste
-
Hallo,
ich möchte gerne die Funktion der backspacetaste mit C programmieren, bekomme es aber nicht richtig hin :(.
Die Funktionsbeschreibung sieht so aus:
backspace() bewegt nach Druck auf die Taste Backspace den Cursor innerhalb einer Zeile um eine Stelle nach links. Dann loescht sie das Zeichen an dieser Position. Anschliessend bewirkt sie, dass alle weiter rechts in der Zeile stehenden Zeichen um eine Stelle nach links verschoben werden. An die letzte Stelle der Zeile kommt ein Leerzeichen. Steht der Cursor in der ersten Spalte einer Zeile, dann ist der Druck auf die Taste Backspace ohne Wirkung.
Was bei mir nicht funktioniert
:
A) Nach Druck auf die Taste Backspace wird der Cursor innerhalb einer Zeile um eine Stelle nach links bewegt.
Steht der Cursor in der ersten Spalte einer Zeile, dann ist der Druck auf die Taste Backspace ohne Wirkung.
Entwicklungstand:
void backspace (void) { int column = cursor_x + first_char - /* column ist der Index */ FIRST_COLUMN; /* des Zeichens in daten */ /* das ausgegeben wird. */ int row = cursor_y + first_line - /* row ist der Index */ FIRST_ROW; /* der Zeile in daten, */ /* die ausgegeben wird. */ int j; /* Zaehler. */ first_char = 0; if( strlen(daten[row]) > 0) /* Die Zeile muss mindestens */ { /* ein Zeichen enthalten */ if( cursor_x > FIRST_COLUMN /* Wenn ausserhalb des */ + SCROLL_WIDTH) /* Scrollbereichs. */ cursor_x--; /* Eine Spalte nach links. */ else /* Sonst: */ { if( first_char > 0 ) /* Es gibt links noch Zeichen. */ { first_char--; /* Nach links scrollen. */ show_file(REGISTER); /* Datei anzeigen. */ } else if( cursor_x > /* Wenn nicht in der ersten */ FIRST_COLUMN ) /* Spalte. */ cursor_x--; /* Eine Spalte nach links. */ } for (j = column; /* Die Schleife durchlaeuft */ j < LINE_LENGTH; /* alle Zeichen rechts von */ j++) /* der aktuellen Cursorpos. */ { /* bis zum Ende der Zeile. */ daten[row][j] = /* Jedes Zeichen wird um */ daten[row][j+1]; /* 1 Pos nach links kopiert. */ } daten[row][LINE_LENGTH-1] = ' '; /* Letztes Zeichen Blank. */ show_line( row, cursor_y ); /* Neue Zeile anzeigen. */ } }
Ich hoffe, Ihr habt einen Vorschlag für mich. Vielen Dank vorab.
IK66
-
Hi !
Wie fragst du die Backspace-Taste ab ?
Fürs das Setzen der Cursorposition kannst du Betriebssystemspezifische Funktionen wie gotoxy benutzen, oder dir was mit printf('\b') zurechtfummeln.
-
Hi,
abgefragt wird die Taste backspace über einen Funktionsaufruf in einer switch-Anweisung:case BACKSPACE: /*Rücktaste */ backspace(); break;
In der Headerdatei ist die backspace-Taste definiert:
#define BACKSPACE 0x0008
und die Funktionsdeklaration aufgeführt:
void backspace (void);
Per Druck auf die Taste wird die Funktion von backspace aufgerufen. Das funktioniert auch alles, nur halt die unter A) und
genannten Punkte nicht...
-
Hier ein Windowsbeispiel:
#include <stdio.h> #include <conio.h> // _getch() #include <windows.h> // SetConsoleCursorPosition void gotoxy ( int x, int y ) { COORD pos; pos.X = x; pos.Y = y; SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), pos ); } int main(int argc, char *argv[]) { printf("%s", "hallo" ); _getch(); printf("\b"); _getch(); printf("\b\b"); _getch(); gotoxy(0,0); _getch(); gotoxy(20,20); _getch(); return 0; }
Taste drücken, Cursor beobachten.
-
Hi,
danke für Deine Hilfe, aber mit goto darf ich nicht arbeiten (Vorgabe). Die Funktion Backspace stellt einen Auszug aus einem kleinen Textverarbeitungsprogramm dar, welches noch viele weitere Funktionen aufweist.Das Problem wird in der Abarbeitung der if-Anweisungen liegen. Finde aber leider den Fehler nicht.
-
Wie willst du den Cursor bewegen?
-
IK66 schrieb:
...aber mit goto darf ich nicht arbeiten (Vorgabe).
das tut B.B. auch nicht.
-
Hi,
der Cursor soll mit der Anweisung
cursor_x--; /* Eine Spalte nach links. */
bewegt werden.