Hallo,
ich lerne gerade C. Mein erstes Programm läuft in der Komandozeile.
Dabei gibt es eine Eingabemöglichkeit.
Links muss der Cursor blinken.
Rechts daneben steht als Text in Zeilen untereinander die Beschreibung verschiedener Eingabe-Möglichkeiten. Etwa so:
_ (blinkender Cusor) M = Mitarbeiter
T = Termine
u.s.w.
...
B = Beenden
Nachdem ich die Auswahl getroffen habe, tut das Programm etwas und ein neuer Bildschirm mit den gewünschten Infos oder einer neuen Auswahl oder Eingabemaske erscheint.
Aber wie kriege ich den Cursor wieder auf die Höhe der ersten geschriebenen Zeile neben der ja links noch Platz ist? Nach links kriege ich ihn mit \r.
Kann mir jemand helfen?
Tonio
Edit by Xin: Betreff erweitert
in c Cursor positionieren [für die cmd.exe unter Windows]
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: in c Cursor positionieren
Moin,
Kurz: Der Zeichensatz hat keine Standard-Anweisungen dafür, um den Cursor zu positionieren.
Gehen wir mal davon aus, dass Du vernünftigerweise auf einem Linux-System das programmieren lernst. In dem Fall kannst Du "ANSI-Sequenzen" nutzen. Die funktionieren teilweise auch auf guten Druckern, da wird das Papier halt dann wieder zurückgespult. Wir reden hier von klassischen Druckern, nicht von Tintenstrahlern oder Laserdrucken
Diese ANSI-Sequenzen werden von allen modernen Shells unterstützt, also zum Beispiel Linux, Mac oder auch klassischen Computern wie dem Amiga. Die Sequenz zum Setzen des Cursors lautet hier "ESC [ P1;P2 H".
Also in C
Und jetzt lass mich raten, Du nutzt ein Betriebsystem ohne eine moderne Shell: Windows? 
Unter Linux gibt es noch die sogenannte Curses-Library, die entsprechende Funktionen anbietet, unter Windows gibt es mit conio.h und hierfür die Funktion gotoxy:
Nur, um die Vorstellung hinzubekommen: Ein Terminal ist eine Datenabladestation. Du spuckst Test aus und das wird dann angezeigt. In den (wirklich sehr) klassischen Computern ist ein Terminal kein Bildschirm, sondern ein Drucker. Darum ist die Idee einen Cursor zu positionieren (oder überhaupt einen Cursor zu haben) etwas vergleichsweise Modernes.Tonio hat geschrieben:Aber wie kriege ich den Cursor wieder auf die Höhe der ersten geschriebenen Zeile neben der ja links noch Platz ist? Nach links kriege ich ihn mit \r.
Kurz: Der Zeichensatz hat keine Standard-Anweisungen dafür, um den Cursor zu positionieren.
Gehen wir mal davon aus, dass Du vernünftigerweise auf einem Linux-System das programmieren lernst. In dem Fall kannst Du "ANSI-Sequenzen" nutzen. Die funktionieren teilweise auch auf guten Druckern, da wird das Papier halt dann wieder zurückgespult. Wir reden hier von klassischen Druckern, nicht von Tintenstrahlern oder Laserdrucken

Diese ANSI-Sequenzen werden von allen modernen Shells unterstützt, also zum Beispiel Linux, Mac oder auch klassischen Computern wie dem Amiga. Die Sequenz zum Setzen des Cursors lautet hier "ESC [ P1;P2 H".
Also in C
Code: Alles auswählen
printf( "\0x1B[%d;%dH", Zeile, Spalte );

Unter Linux gibt es noch die sogenannte Curses-Library, die entsprechende Funktionen anbietet, unter Windows gibt es mit conio.h und hierfür die Funktion gotoxy:
Code: Alles auswählen
#include<stdio.h>
#include<conio.h>
int main(void)
{
clrscr(); // Bildschirm löschen
gotoxy(50,15); // Cursor positionieren
printf("Hello world");
getch(); // Tastendruck abwarten
return 0;
}
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: in c Cursor positionieren
Hallo,
danke für die Erklärung. Ich habs begriffen. Ich hab auch nur Windows.
Und es klappt nicht.
Ich bekomme folgende Meldungen:
undefined reference to `clrscr'
undefined reference to `gotoxy'
ist vielleicht irgendwas nicht installierrt?
Gruß
Tonio
danke für die Erklärung. Ich habs begriffen. Ich hab auch nur Windows.
Und es klappt nicht.
Ich bekomme folgende Meldungen:
undefined reference to `clrscr'
undefined reference to `gotoxy'
ist vielleicht irgendwas nicht installierrt?
Gruß
Tonio
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: in c Cursor positionieren
Borland C. ^^Tonio hat geschrieben:Hallo,
danke für die Erklärung. Ich habs begriffen. Ich hab auch nur Windows.
Und es klappt nicht.
Ich bekomme folgende Meldungen:
undefined reference to `clrscr'
undefined reference to `gotoxy'
ist vielleicht irgendwas nicht installierrt?
Ich gebe zu, ich habe mir das unter Windows nie angetan. Wenn Du Visual Studio nutzt, kennt die conio kein gotoxy oder clrscr, wie ich gerade festgestellt habe. Aber das kann man sich ganz einfach selbst schreiben (aka aus dem Netz kopieren).
Code: Alles auswählen
#include<stdio.h>
#include<conio.h>
#include <Windows.h>
void clrscr ()
{
COORD coordScreen = { 0, 0 };
DWORD cCharsWritten;
CONSOLE_SCREEN_BUFFER_INFO csbi;
DWORD dwConSize;
HANDLE hConsole = GetStdHandle (STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo (hConsole, & csbi);
dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
FillConsoleOutputCharacter (hConsole, TEXT (' '),
dwConSize,
coordScreen,
& cCharsWritten);
GetConsoleScreenBufferInfo (hConsole, & csbi) ;
FillConsoleOutputAttribute (hConsole,
csbi.wAttributes,
dwConSize,
coordScreen,
& cCharsWritten);
SetConsoleCursorPosition (hConsole, coordScreen);
}
void gotoxy(int x, int y)
{
COORD c = { x, y };
SetConsoleCursorPosition( GetStdHandle(STD_OUTPUT_HANDLE) , c);
}
int main(void)
{
clrscr(); // Bildschirm löschen
gotoxy(50,15); // Cursor positionieren
printf("Hello world");
_getch(); // Tastendruck abwarten
return 0;
}

Ich ändere mal den Topic-Titel, denn das ist eigentlich doch recht interessant - so dass es günstig wäre die Lösungen per Google auch hier finden zu können.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: in c Cursor positionieren [für die cmd.exe unter Windows


recht, recht vielen Dank!! Es funktioniert.
Ich habe es einfach abkopiert und werde mich auch noch damit beschäftigen, es bis zum Verständnis zu durchdringen.
Mit herzlichen Grüßen


Tonio