Schmidt: C Sprungbefehl für Consolenausgabe gesucht

Hallo

ich erinnere mich, dass es einen Befehl gab mit dem ich in TurboPascal auf der Consolenausgabe in eine Bestimmte Zeile springen  konnte und dort den Text überschreiben konnte. Ich glaube er hieß goto(Zeile,Spalte);

Ich suche nun das Pendant in C. Ich verwende GCC mit WIN XP (MinGW);

Ich merke an, dass ich NICHT nach den GOTO Sprungbefehl innerhalb des Quellcodes meine!

Vielen Dank.

  1. Hallo,

    du suchst wahrscheinlich gotoxy aus der conio.h. Meines Wissens handelt es sich dabei aber um ein Relikt aus MS-DOS-Zeiten und es könnte sein, dass dieser Header bei deinem Compiler gar nicht dabei ist.

    Stichworte für google: conio.h, ncurses, Improved Console

    Gruss,
    OhneName

    1. du suchst wahrscheinlich gotoxy aus der conio.h. Meines Wissens handelt es sich dabei aber um ein Relikt aus MS-DOS-Zeiten und es könnte sein, dass dieser Header bei deinem Compiler gar nicht dabei ist.

      Hallo, ja, conio.h scheint es gewesen zu sein.
      Ich habe zwar die conio.h, allerdings enthält sie nicht die Funktion gotoxy().

      Stichworte für google: conio.h, ncurses, Improved Console

      Improved Console enthält laut Beschreibung die Funktionen, allerdings nur für WIN32. Ich hatte mir gewünscht es auch unter Linux nutzen zu können.
      ncurses hingegen scheint ein Riesen Brocken zu sein. Meiner Einschätzung nach lohnt der Aufwand nicht sich dort durch zu wühlen.

      Ich werde nun Improved Console ausprobieren und in kauf nehmen, dass WIN32 Vorraussetzung ist.

      Vielen Dank.

      1. Ich werde nun Improved Console ausprobieren und in kauf nehmen, dass WIN32 Vorraussetzung ist.

        Das funktioniert leider auch nicht auf Anhieb mit meiner Umgebung.

  2. Hi,

    ich erinnere mich, dass es einen Befehl gab mit dem ich in TurboPascal auf der Consolenausgabe in eine Bestimmte Zeile springen  konnte und dort den Text überschreiben konnte. Ich glaube er hieß goto(Zeile,Spalte);
    Ich suche nun das Pendant in C. Ich verwende GCC mit WIN XP (MinGW)

    das reicht nicht als Information. Eine solche Funktion gehört nicht zum Sprachumfang von C, sondern wäre Teil einer Bibliothek für die Bildschirmausgabe. Da solltest du zumindest sagen, welche Lib du dafür verwendest.

    Ich merke an, dass ich NICHT nach den GOTO Sprungbefehl innerhalb des Quellcodes meine!

    Okay, aber das war anhand der Beschreibung schon klar. Nur der Thread-Titel würde einen auf die Idee bringen. Denn was du möchtest, hat ja mit einem "Sprungbefehl" nichts zu tun - es soll nicht springen, sondern den Cursor positionieren; und es wäre kein Befehl, sondern eine Funktion.

    Ciao,
     Martin

    --
    F: Was ist schneller: Das Licht oder der Schall?
    A: Offensichtlich der Schall. Wenn man den Fernseher einschaltet, kommt immer erst der Ton, und dann erst das Bild.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. das reicht nicht als Information. Eine solche Funktion gehört nicht zum Sprachumfang von C, sondern wäre Teil einer Bibliothek für die Bildschirmausgabe. Da solltest du zumindest sagen, welche Lib du dafür verwendest.

      Nun, bisher verwende ich stdio.h (und stdlib.h).

      Okay, aber das war anhand der Beschreibung schon klar. Nur der Thread-Titel würde einen auf die Idee bringen. Denn was du möchtest, hat ja mit einem "Sprungbefehl" nichts zu tun - es soll nicht springen, sondern den Cursor positionieren; und es wäre kein Befehl, sondern eine Funktion.

      Du hast recht. Mir viel in dem Moment keine bessere Beschreibung ein.

  3. Hello,

    ich erinnere mich, dass es einen Befehl gab mit dem ich in TurboPascal auf der Consolenausgabe in eine Bestimmte Zeile springen  konnte und dort den Text überschreiben konnte. Ich glaube er hieß goto(Zeile,Spalte);

    Der Befehl hieß gotoXY() und wirkte über das DOS-API (INT 21h) auf das BIOS-Datensegment für die Cursorposition in der aktuellen Bildschirmseite (bei VGA waren das 8).
    Es war also eine OS-spezifische Sache, bzw. sogar von der Hardware abhängig.

    Du müsstest für C also in der API für das jeweilige OS auf der verwendeten Hardware schauen, was geht.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hallo,

      ich erinnere mich, dass es einen Befehl gab mit dem ich in TurboPascal auf der Consolenausgabe in eine Bestimmte Zeile springen  konnte und dort den Text überschreiben konnte. Ich glaube er hieß goto(Zeile,Spalte);
      Der Befehl hieß gotoXY()

      stimmt, jetzt entsinne ich mich auch.

      und wirkte über das DOS-API (INT 21h)

      Nein. Der DOS-Funktionsumfang kannte sowas nicht. Die entsprechende Bibliothek von Turbo Pascal und auch die conio.lib von Borland C haben direkt den Interrupt 10h aufgerufen - das ist der Dispatcher für (fast) alle Funktionen des EGA/VGA-BIOS.

      Es war also eine OS-spezifische Sache, bzw. sogar von der Hardware abhängig.

      Von der Hardware abhängig stimmt irgendwie - wobei diese Schnittstelle im EGA/VGA-Standard exakt spezifiziert ist und seit gefühlten 20 Jahren von allen Grafikkarten unterstützt wird.
      Dadurch, dass direkt BIOS-Funktionen aufgerufen wurden, ging diese API quasi an DOS vorbei; daher stimmt "OS-spezifisch" nur insofern, dass das OS diese Direktaufrufe zulassen muss. Die Methode hätte beispielsweise unter OS/2 im Textmodus auch funktionieren können, und sie würde sogar in einer Embedded-Anwendung funktionieren, die gar kein OS im heutigen Sinn hat.

      Ciao,
       Martin

      --
      Butterkeksverteiler zu werden ist vermutlich eine der wenigen beruflichen Perspektiven, die sich noch bieten, wenn man einen an der Waffel hat.
        (wahsaga)
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  4. Moin Moin!

    Versuch es mit Ansi-Sequenzen (Terminal-Steuercodes). Unter Unixen ist das durchaus üblich, um nicht zu sagen: der einzig mögliche Weg. Typischerweise schlägst Du Dich allerdings nicht direkt damit herum, sondern über termcap/terminfo und ggf. curses/ncurses, auch wenn die meisten Terminals sich mehr oder weniger wie ein (erweitertes) VT100 oder wie ein xterm benehmen.

    DOS konnte einen Treiber namens ANSI.SYS laden, damit waren solche Steuercodes auch unter DOS verfügbar, das zog sich auch durch alle DOS-basierten Windows-Versionen bis hin zu Windows ME. Die NT-basierten Windows-Versionen können, soweit ich weiß, auch mit ANSI-Sequenzen umgehen, evtl. muß man die aber explizit einschalten. Frag mich nur nicht, wo. Google hilft ... ;-)

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".