Forum: PC-Programmierung Konsole clear funktioniert nicht


von Jens (Gast)


Lesenswert?

Hallo,
ich möchte ein Konsolen-Programm erstellen. Dazu möchte ich auch die 
Funktion benutzen, dass die Konsole gelöscht wird und neu bescrieben 
wird. Aber das funktioniert bei mir nicht wirklich (Windows10; Cygwin 
GCC)
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <unistd.h>
4
5
static void clearScreen(void);
6
7
int main(void) {
8
  while(1)
9
  {
10
    clearScreen();
11
    printf("r: run; t: train; q: quit\r\n\r\n");
12
  }
13
  return EXIT_SUCCESS;
14
}
15
16
void clearScreen(void)
17
{
18
#if defined(__linux__) || defined(__unix__) || defined(__APPLE__)
19
    system("clear");
20
#endif
21
22
#if defined(_WIN32) || defined(_WIN64)
23
    system("cls");
24
#endif

Momentan bin ich nur dabei, diese Funktion zu testen. Daher ist mein 
Programm noch ziemlich leer.
Aber die Konsole wird nicht gelöscht und immer neu unter der alten 
ausgabe geschrieben.
Aber alles was ich immer gefunden habe, war system("cls"). Gibt es noch 
andere möglichkeiten? Oder woran könnte es liegen, dass es bei mir nicht 
funktioniert?

von zitter_ned_aso (Gast)


Lesenswert?

ich würde zuerst ohne dieser while-Schleife probieren.

von leo (Gast)


Lesenswert?

Jens schrieb:
> system("clear");

Ich schaetze mal, das macht ein neues Fenster auf, das du dann loescht.

leo

von zitter_ned_aso (Gast)


Lesenswert?

Jens schrieb:
> Windows10; Cygwin
> GCC)


Ach so, falls es dich interessierts, wie es unter Linux aussieht:

ein leeres, schwarzes Konsolenfenster ;-)

Dein printf("....") ist da nicht zu sehen.

(lösche die while-Schleife - es geht zu schnell)

von Jens (Gast)


Lesenswert?

zitter_ned_aso schrieb:
> ich würde zuerst ohne dieser while-Schleife probieren.

warum?
aber auch ohne der schleife wird der Text nicht gelöscht.

leo schrieb:
> Ich schaetze mal, das macht ein neues Fenster auf, das du dann loescht.

Ein neues fenster wurde nicht geöffnet. auch wurde der Text ja immer im 
selben Fenster geschrieben

von zitter_ned_aso (Gast)


Lesenswert?

So sollte es funktionieren. Aber auch das ist zu schnell.
1
while(1){
2
     clearScreen();
3
     printf("r: run; t: train; q: quit\r\n\r\n");
4
     fflush(stdout);
5
}

Mit Pause:
1
while(1){
2
     clearScreen();
3
     printf("r: run; t: train; q: quit\r\n\r\n");
4
     fflush(stdout);
5
     getchar();
6
}

Jens schrieb:
> aber auch ohne der schleife wird der Text nicht gelöscht.

Welcher Text wird nicht gelöscht? Unter Linux wird alles gelöscht.

von foobar (Gast)


Lesenswert?

Nimm doch einfach die ANSI-Sequenz (ne Gut-genug-Lösung):
1
void clearScreen(void)
2
{
3
    printf("\e[H\e2J");
4
    fflush(stdout);
5
}

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jens schrieb:
> Aber alles was ich immer gefunden habe, war system("cls").

Die Konsole kann unter Windows mit einer ganzen Reihe von Funktionen aus 
der Win32-API angesteuert werden.

https://docs.microsoft.com/en-us/windows/console/console-functions

Diese Funktionen sind allerdings recht "low-level", wie auch das zweite 
Beispiel hier zeigt:

https://docs.microsoft.com/en-us/windows/console/clearing-the-screen

von Jens (Gast)


Lesenswert?

zitter_ned_aso schrieb:
> Welcher Text wird nicht gelöscht?

r: run; t: train; q: quit\r\n\r\n

zitter_ned_aso schrieb:
> Unter Linux wird alles gelöscht.

Bein mir unter Windows aber nicht

zitter_ned_aso schrieb:
> while(1){
>      clearScreen();
>      printf("r: run; t: train; q: quit\r\n\r\n");
>      fflush(stdout);
>      getchar();
> }

Auch das bringt nichts.

foobar schrieb:
> void clearScreen(void)
> {
>     printf("\e[H\e2J");
>     fflush(stdout);
> }

Das springt zwar wieder zur ersten Zeile und überschreibt das 
vorhandene, löscht aber nicht den bisherigen Inhalt der Konsole

von zitter_ned_aso (Gast)


Lesenswert?

Und wenn du  einfach den Befehl
1
cls
in der Konsole eingibst, dann wird alles (wie gewünscht) gelösscht?

von zitter_ned_aso (Gast)


Lesenswert?

Jens schrieb:
> zitter_ned_aso schrieb:
>> Welcher Text wird nicht gelöscht?
>
> r: run; t: train; q: quit\r\n\r\n

Moment mal, du schreibst doch selbst diesen Text.

 Zuerst löscht du das Ausgabefenster und dann schreibst du diesen Text.

von foobar (Gast)


Lesenswert?

>> void clearScreen(void)
>> {
>>     printf("\e[H\e2J");
>>     fflush(stdout);
>> }
>
> Das springt zwar wieder zur ersten Zeile und überschreibt das
> vorhandene, löscht aber nicht den bisherigen Inhalt der Konsole

Upps, sorry.  Da fehlt ein [ vor dem 2J: "\e[H\e[2J"

"\e[H" ist Cursor-Home, "\e[2J" ist Clear-Screen.

Btw, mit printf("\e[%d;%dH", zeile, spalte) kannst du den Cursor 
positionieren.  Siehe: https://en.wikipedia.org/wiki/ANSI_escape_code

von Jens (Gast)


Lesenswert?

zitter_ned_aso schrieb:
> Moment mal, du schreibst doch selbst diesen Text.
>
>  Zuerst löscht du das Ausgabefenster und dann schreibst du diesen Text.

Ja, durch die schleife, soll der geschriebene Text aber wieder gelöscht 
werden und neu gescrieben werden. Der Text soll dann immer an der selben 
stelle geschrieben werden. Daher möchte ich das Fenster löschen und neu 
beschreiben. Wenn das funktioniert, werden später noch weitere daten 
dargestellt, die sich dann auch ändern.

foobar schrieb:
> "\e[H" ist Cursor-Home, "\e[2J" ist Clear-Screen.

Das sieht besser aus.
Aber gelöscht wird der Inhalt ja auch nicht,sondern nur nach oben 
verschoben. Wenn ich es öfters ausführe, kann ich scrollbalken nach oben 
schieben und sehe den alten text

von Thomas M. (Firma: https://img.favpng.com/23/21/3) (thomasmopunkt)


Lesenswert?

ist so ein typisches C Problem..
"However, there is no Win32 Application Programming Interface (API) or 
C-Runtime function that will perform this function."

Ich hatte dazu mal irgendwo eine Lösung gefunden..sind nur etwa 20 
Zeilen.damit es funktioniert...
https://support.microsoft.com/de-de/help/99261/how-to-performing-clear-screen-cls-in-a-console-application

kannst ja auch mal das testen
https://cboard.cprogramming.com/c-programming/23780-how-do-i-clear-screen-c-program.html


Ich glaube das ght dann aber wiede nur unter Windows, ins Linux klappt 
das dann auch wieder nicht..
In Pascal wäre der Befeh übrigens einfach clrscr;

: Bearbeitet durch User
von Thomas M. (Firma: https://img.favpng.com/23/21/3) (thomasmopunkt)


Lesenswert?

so sieht clrscr im Source aus in Pascal, es werden offenbar wie bei dem 
Microsoft Beispiel für C lediglich Leerzeichen geschrieben, allerdings 
ist mir dabei nie aufgefallen das ich das ältere noch sehen konnte.
1
procedure ClrScr;
2
var
3
  DestCoor: TCoord;
4
  numChars, x : DWord;
5
begin
6
  DestCoor.X := WindMinX - 1;
7
  DestCoor.Y := WindMinY - 1;
8
  numChars := (WindMaxX - WindMinX + 1);
9
10
  repeat
11
    FillConsoleOutputAttribute(GetStdHandle(STD_OUTPUT_HANDLE), TextAttr,
12
      numChars, DestCoor, x);
13
    FillConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE), #32,
14
      numChars, DestCoor, x);
15
    inc(DestCoor.Y);
16
  until DWord(DestCoor.Y)=WindMaxY;
17
18
  GotoXY(1, 1);
19
end; { proc. ClrScr }

: Bearbeitet durch User
von test (Gast)


Lesenswert?

Thomas M. schrieb:
> ist so ein typisches C Problem..
> "However, there is no Win32 Application Programming Interface (API) or
> C-Runtime function that will perform this function."

Nur weil der Compilerhersteller nix bequemes für diesen Teil der API 
mitliefert? Es wird immer irgendwas fehlen.

Kann man dann einfach selbst machen, die Windows API ist gut 
dokumentiert und Funktionen aus DLL aufrufen geht auch unter C.

> Ich glaube das ght dann aber wiede nur unter Windows, ins Linux klappt das dann 
auch wieder nicht..

Klar, Linux hat ne andere API als Windows. Aber auch unter Linux wird 
das System entsprechende Funktionen bereitstellen.
Wobei es unter Linux garantiert ne fertigte lib dafür gibt (ncurses ?).

von Dirk B. (dirkb2)


Lesenswert?

Jens schrieb:
> Wenn das funktioniert, werden später noch weitere daten
> dargestellt, die sich dann auch ändern.

Dann schau dir mal ncurses an. Gibt es auch für Windows.

von Thomas M. (Firma: https://img.favpng.com/23/21/3) (thomasmopunkt)


Lesenswert?

ich denke aber clrscr...ist so etwa grundlegendes wie delay..das es mal 
als Standard dazugepackt werden sollte..das Problem haben ja alle 
Neueinsteiger

von test (Gast)


Lesenswert?

Naja, Neueinsteiger programmieren heutzutage eher selten GUI in Konsole 
;-)

Wenn dann nutzt man eher Konsolenprogramme die kontinuierlich etwas auf 
der Konsole ausgeben.

Früher war GUI bei DOS Programmen üblich, aber das war ja nicht per 
Konsole.

von Thomas M. (Firma: https://img.favpng.com/23/21/3) (thomasmopunkt)


Lesenswert?

Also, ein Hallo world in dder Konsole finde ich nicht so selten..
Die ersten Schritte erfolgen denke ich sehr oft in der Console..
mit welchem Befehl kann man in C  alles hinter der aktuellen Ausgabe 
löschen ohne das aktuelle neu geschriebene zu löschen?
Vermutlich muss man dazu dann die eben genannten Beispiele umschreiben..

: Bearbeitet durch User
von test (Gast)


Lesenswert?

BTW: Sollte eigentlich möglich sein direkt in den Konsolenbuffer zu 
schreiben, oder? Dann ist löschen überflüssig und man kann seinen Kram 
genauso machen wie früher bei den DOS Programmen.

von Dirk B. (dirkb2)


Lesenswert?

Thomas M. schrieb:
> ich denke aber clrscr...ist so etwa grundlegendes wie delay..das es mal
> als Standard dazugepackt werden sollte..das Problem haben ja alle
> Neueinsteiger

clrscr ist nicht nötig.
Das sollten Neueinsteiger schnell lernen.

Genauso wie Umlaute in der Konsole.
Ist zwar hübsch, aber überflüssig zum lernen.

Ein TUI werden sie erstmal nicht nutzen.

von Dirk B. (dirkb2)


Lesenswert?

test schrieb:
> BTW: Sollte eigentlich möglich sein direkt in den Konsolenbuffer zu
> schreiben, oder? Dann ist löschen überflüssig und man kann seinen Kram
> genauso machen wie früher bei den DOS Programmen.

Dann bist du an ein System gebunden.
Wozu dann C?

von Thomas M. (Firma: https://img.favpng.com/23/21/3) (thomasmopunkt)


Lesenswert?

Wieso ist clrscr überflüssig?
Auch umlaute sind nicht unwichtig..
Schon mal gehört, das man am besten lernt wenn etwas Spaß macht?
Umlaute und das Benutzen der Cursortasten sind wohl die beliebtesten 
Dinge als Anfänger um Anständige Sätze bilden zu können und nicht nie
Wie löscht Du denn dann den Bildschirm..sorry aber sowas höre ich das 
erste mal..
Einfache eingaben Wie
Wie lautete Dein Vorname
Wie lautet Dein Nachname
ClrScr;
Hallo Mr.X oder darf ich y sagen?

Udn auch Delays können sinnvoll eingesetzt werden..oder willst Du 
ernsthaft bei einem 5 Zeile Programm einen Counter einsetzten?
Abgesehen davon finde ich sollte der Programmierer selber entshcheiden, 
was man tut und was nicht..wenn man es mit einem neuen Bildschirm 
schreiben möchte..möchte ich mir nicht sagen lassen, das macht man 
nicht.
Daher haben wir heutzutage diese unsäglichen Webseiten im OnePAge 
Design*kotz*

Damals...wurde den Anfänger die sowas gemacht haben, gesagt..sowas macht 
man nicht...heute wären es voll die Trendsetter....oder die Profil 
Webdesigner von heute sind eigentlich eher die totalen Anfänger geworden

: Bearbeitet durch User
von test (Gast)


Lesenswert?

Dirk B. schrieb:
> test schrieb:
> BTW: Sollte eigentlich möglich sein direkt in den Konsolenbuffer zu
> schreiben, oder? Dann ist löschen überflüssig und man kann seinen Kram
> genauso machen wie früher bei den DOS Programmen.
>
> Dann bist du an ein System gebunden.
> Wozu dann C?

Man ist immer an ein System gebunden. Es sei den das Programm ist sehr 
einfach (im Bezug auf die Systemintegration) oder Müll.

Mit C hat das aber nix zu tun, man kann in jeder Sprache 
plattformübergreifend oder plattformspezifisch schreiben.

Aber gerade wenn es um GUI geht kommt man mit irgendwelchen C Standards 
oder POSIX nicht weiter. Die Systeme unterscheiden sich hier so extrem 
das für jedes System individuell entwickelt werden muss. Oder man 
bekommt Müll.

von Thomas M. (Firma: https://img.favpng.com/23/21/3) (thomasmopunkt)


Lesenswert?

ernstgemeinte Frage..und soll jettz nicht dem Pascal vs. C Streit 
dienen.
Wenn jemand nach clrscr fragt, kommt IMMER zuerst die Escape sequenz von 
jemandem..was damals zu Dos Zeiten evtl ok gewesen wäre...oder eben auch 
nicht..denn..

Wenn ich heute im Dos Fenster ein Pascal Programm laufen lasse, läuft 
das ja ohne Probleme, außer es wird der Runtime Error 200 nicht 
geptacht.

Wenn nun aber jemand, was ja offensichtlich seeehr viele gemacht 
haben..in ihren C Programmen einfach die Escape Sequenz genutzt haben 
für clrscr..
Laufen dann all diese Programme heute nicht mehr?
Gibt es für sowas auch einen Patch?
Oder war die verwendung der Escape Sequenz schon damals ungeschickt bzw 
falsch?!

Ich habe jetzt leider kein einfache C Programm hier, mit dem ich das 
selber testen könnte

ICh lade mir gleich mal Turbo C runter um das mal zu versuchen:-)

: Bearbeitet durch User
von test (Gast)


Lesenswert?

Man muss erstmal generell zwischen einem DOS Programm und einem Windows 
Konsolenprogramm unterscheiden.

Sieht beides erstmal gleich aus, unterscheidet sich aber grundsätzlich.


Ein Windows Konsolenprogramm hat kein Fenster, aber es öffnet eine 
Konsole (diese Konsole ist aber kein DOS was dort aufgeht, und auch 
keine Windows Kommandozeile). Diese Konsole ist erstmal nix anderes als 
ne Textbox.

von Sven B. (scummos)


Lesenswert?

Klingt vielleicht doof, aber erfahrungsgemäß

 - sollte man für nichttriviale interaktive Konsolenprogramme sowas wie 
ncurses nehmen
 - wird das dann oft komplizierter als wenn man einfach eine normale GUI 
mit z.B. Qt gebaut hätte.

von Thomas M. (Firma: https://img.favpng.com/23/21/3) (thomasmopunkt)


Lesenswert?

ich rede jetzt von einem Dos Programm..das Windows in der DOS Konsole 
öffnet...

Sehe gerade..Borland C  läuft nicht mal im DOS Fenster..schade...

von Thomas M. (Firma: https://img.favpng.com/23/21/3) (thomasmopunkt)


Lesenswert?

geht ncurses denn auch unter Dos? nein...dazu nutzt man conio.h
https://de.wikipedia.org/wiki/Ncurses
"Betriebssystem   Unix-Derivate, GNU/Linux"

https://en.wikipedia.org/wiki/Conio.h
conio.h is a C header file used mostly by MS-DOS compilers to provide 
console input/output.[1] It is not part of the C standard library or ISO 
C, nor is it defined by POSIX.



in der Conio.h. gibt es dann auch
clrscr!

: Bearbeitet durch User
von Dirk B. (dirkb2)


Lesenswert?

Thomas M. schrieb:
> Sehe gerade..Borland C  läuft nicht mal im DOS Fenster..schade...

Weil das seit Winows NT kein DOS Fenster mehr ist.

Die ANSI-Escapesequencen sind seit XP passe.
Seit Windows 10 kann man sie wohl wieder aktivieren.

Ein TUI hat meist auch direkt in den Bildschirmspeicher geschrieben.
Und diese Emulation gibt es auch nicht mehr.

von Thomas M. (Firma: https://img.favpng.com/23/21/3) (thomasmopunkt)


Lesenswert?

ja eben es ist die Windows Konsole....nur da weiter oben der Einwand 
kam..Konsole Dos Fenster etc...
Jedenfalls mit PAscal geht alles noch ob nun im Dos Fenster oder in 
eienr Windows Konsole, egal ob Windows 3.0 oder Windows 10...

Offenbar ist es also geschickter es mit dem oben genannten C code zu 
lösen, der wie clrscr in Pascal/Freepascal einfach mit Blank Zeichen den 
Bildschirm füllt..als mit irgendwechen Esc Sequenzen oder sowas 
rumzuspielen, das das 2 Jahre funktioniert und bei nächsten 
Betriebsssytem nur noch fehlerhaft arbeitet

von Yalu X. (yalu) (Moderator)


Lesenswert?

Thomas M. schrieb:
> ich denke aber clrscr...ist so etwa grundlegendes wie delay..das es mal
> als Standard dazugepackt werden sollte..das Problem haben ja alle
> Neueinsteiger

Wenn alles, was irgendjemand als etwas Grundlegendes ansieht, in die
Standardbibliothek gepackt würde, würde diese sehr schnell riesengroß
werden. Das ist an sich kein Problem, denn in Free Pascal, Python und
einigen anderen Sprachen wird es ja mit Erfolg so gemacht.

Es ist aber die Philosophie von C, sowohl den Sprachumfang also auch die
Standardbibliothek möglichst schlank zu halten. Zudem versucht C, von
möglichst wenigen Annahmen zur Zielplattform auszugehen. ClrScr und
GotoXY bspw. setzen einen Bildschirm als stdout-Medium voraus. stdout
kann aber genauso gut ein Drucker, eine Datei, eine Pipe oder eine
Netzwerkverbindung sein, wo diese Funktionen wenig Sinn haben. Also
beschloss man, dass stdout einfach ein abstrakter Datenstrom ist, über
den sequentiell Zeichen oder Datenbytes übertragen werden, mehr nicht.

Diese Philosophie ist zum einen traditionell begründet, zum anderen aber
auch darin, dass C im Gegensatz zu Free Pascal und Python von der ISO
genormt ist. Je umfangreicher eine Sprache und ihre Standardbibliothek
ist, umso aufwendiger und schwieriger ist auch die Pflege der Norm (bei
C++ scheint man diesbezüglich derzeit die Grenzen ausloten zu wollen
;-)).

Auch in Free Pascal sind ClrScr und GotoXY – anders als die reinen
Stream-Funktionen Read und Write – nicht in der Default-Bibliothek
enthalten, sondern wurden in die Crt-Bibliothek ausgelagert. Der
Unterschied zu C liegt darin, dass bei Free Pascal die Crt-Bibliothek
gleich mitgeliefert wird, bei C muss man sie (bspw. in Form von ncurses)
nachinstallieren. Das ist zum einen lästig, zum anderen bestehen für
eine externe, auf eine bestimmte Anwendung (hier: Bildschirmausgaben)
spezialisierte Bibliothek kaum Beschränkunge bzgl. ihres Umfangs, so
dass ncurses eine Vielzahl von High-Level-TUI-Funktionen (Wie bspw.
Fenster) implementiert, die Crt nicht hat.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Thomas M. schrieb:
> in ihren C Programmen einfach die Escape Sequenz genutzt haben für
> clrscr..
> Laufen dann all diese Programme heute nicht mehr?

Unter DOS funktionierte diese Esc-Sequenz auch nur, wenn der 
Speicherfresser ANSI.SYS geladen war.

In Windows 10, "Anniversary Edition", wurde diese Funktionalität 
erstmalig für alle Konsolanwendungen eingebaut.

Um sie nutzen zu können, muss die Win32-API Funktion SetConsoleMode mit 
dem Flag ENABLE_VIRTUAL_TERMINAL_PROCESSING aufgerufen werden.

Eine detaillierte Beschreibung der verschiedenen nutzbaren Esc-Sequenzen 
findet sich hier:

https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences

(Vermutlich war irgendein Entwickler bei MS es leid, die arg grindige 
Win32-Console-API zu nutzen ...)

von Thomas M. (Firma: https://img.favpng.com/23/21/3) (thomasmopunkt)


Lesenswert?

Na fast richtig.
In CRT Unit gibt es ja auch Windows und mehr
http://wiki.freepascal.org/Crt/de#Window

Somit könnte C einfach mehr der standard libs zugepackt werden, die es 
gerade für Anfänger nervig machen, da bereits einfache Dinge kompliziert 
werden.
Später mag das dann weniger dramtaisch sein

: Bearbeitet durch User
von Vn N. (wefwef_s)


Lesenswert?

Thomas M. schrieb:
> Somit könnte C einfach mehr der standard libs zugepackt werden, die es
> gerade für Anfänger nervig machen, da bereits einfache Dinge kompliziert
> werden.

Was macht ein clrscr() dann auf Systemen ohne Bildschirm (embedded)?

Beitrag #5782800 wurde vom Autor gelöscht.
von Thomas M. (Firma: https://img.favpng.com/23/21/3) (thomasmopunkt)


Lesenswert?

?!
Was sollte es denn Deiner Meinung nach tun?!
Die Unit crt in Pascal/Freepascal nutze ich auch eher selten im 
embedded...aber sie ist halt dabei und könnte für z.B. delay genutzt 
werden
Wenn es in einer extra Lib ist, die aber mitgeliefert wird, wie eben bei 
Pascal..dann nutzt Du sie einfach nicht. verstehe Deine Frage jetzt 
nicht

: Bearbeitet durch User
von test (Gast)


Lesenswert?

Was macht man wenn man per ssh auf der Console ist? yalu hatt das 
Problem schon schön zusammengefasst.

Plattformübergreifend verzichtet man besser auf solche Spielereien. 
Sonst wirds sehr sehr mühselig (man kann sicher auf allen Systemen 
irgendwie rausfinden ob eine Konsole lokal ist und welche Fähigkeiten 
sie hat).

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Thomas M. schrieb:
> Somit könnte C einfach mehr der standard libs zugepackt werden, die es
> gerade für Anfänger nervig machen

Da C nicht dafür gedacht ist, die Probleme von Anfängern zu lösen, und 
das Problem irgendwelcher Bildschirmmanipulationen die wenigsten 
Entwickler von Konsolapplikationen überhaupt interessiert, dürfte sich 
hier ein Zielkonflikt auftun.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Thomas M. schrieb:
> Wenn jemand nach clrscr fragt, kommt IMMER zuerst die Escape sequenz von
> jemandem..was damals zu Dos Zeiten evtl ok gewesen wäre...oder eben auch
> nicht..denn..

Unter unixoiden Betriebssystemen waren und sind die ANSI-Sequenzen
einfach Standard, weil sie nicht nur lokal, sondern auch auf externen
Bildschirmterminals und über zeichenbasierte Remoteverbindungen wie
Telnet und SSH funktionieren.

Auch in DOS und früheren Windows-Versionen wurden die ANSI-Sequenzen
unterstützt, dann wurden sie abgeschafft, um sie mit Windows 10 wieder
auferstehen zu lassen.

Übrigens verwendet Free Pascal unter Linux – der Unix-Tradition folgend
– für ClrScr, GotoXY usw. ebenfalls die ANSI-Sequenzen. Das Löschen der
Konsole übernimmt dabei der jeweilige Terminalemulator, was effizienter
und bei Remoteverbindungen Traffic sparender als die Ausgabe von
tausenden von Leerzeichen ist.

Thomas M. schrieb:
> Na fast richtig.
> In CRT Unit gibt es ja auch Windows und mehr
> http://wiki.freepascal.org/Crt/de#Window

Die Crt-Fenster sind keine echten Fenster im Sinne eines UI, sondern
lediglich eine Begrenzung der Textausgabe auf eine Teil des Bildschirms.
Die ncurses-Fenster hingegen erlauben Öffnen, Schließen, Stapeln, Ändern
der Größe, Verschieben dekorieren mit Rahmen u.ä., Menüs u.v.m., ganz
wie in einem GUI-Framework, nur dass das Ganze eben textbasiert ist.

Und weil die Darstellung der Fenster komplett auf ANSI-Sequenzen
aufbaut, funktioniert das alles auch über SSH.

von Thomas M. (Firma: https://img.favpng.com/23/21/3) (thomasmopunkt)


Lesenswert?

"Da C nicht dafür gedacht ist, die Probleme von Anfängern zu lösen"
?!
Aha..C ist wieder was für Vollprofis wie sie hier in diesem Forum sind 
oder was willst Du damit sagen?!#
Fidnest Du nciht das die Diskussion bislang ausgesprochen friedlich 
war...;-)#

Es geht nicht darum ob einen Konsolenoperationen interessieren!! Die 
interessieren auch in Pascal keinen!
Es geht um Programme im Textmodus!!
Heutzutage  werden die aber üblich im Windows getestet..und da gibt es 
nun in C plötzlich >Probleme wenn man mit der ESC Sequenz arbeitet..
Wieso werden hier immer die Fakten völlig verdreht?



Ah ok, ncurses scheint jedenfalls sehr umfangreich zu sein..wie in 
Pascal die Window Unit oder wie die genau heißt.


aber wie dem auch sei..offenbar liegt das einzige Problem dabei, das 
eigentlich nur eine delay.h bei C zugelegt werden könnte.
Somit können wir uns den Hahnenkampf um C vs. Pascal ja auch sparen.
Wenn man durch die Foren surft, fällt halt eben nur gerade dieses clrscr 
und delay Problem auf..ist also halt absolut nicht selten.
In anderen Sprachen wie D ist es die disp.h ..aber der Definition von 
Rufus ist die Programmiersprache dann ja eine Anfängersprache, da sie 
offenbar zumindest Rücksicht auf "Anfängerprobleme" nimmt;-)
Wobei ich mich damit gerade weit aus dem Fenster lehne, da ich keine 
Ahnung habe, ob die zur Standardlieferung von D gehört;-) Ich 
unterstelle das jetzt einfach mal um eine Spitze an Rufus ...

von Vn N. (wefwef_s)


Lesenswert?

Thomas M. schrieb:
> ?!
> Was sollte es denn Deiner Meinung nach tun?!

Das frage ich ja dich, du willst ja, dass clrscr() Teil des Standards 
wird! Teil des Standards wird aber nur, wofür es auf möglichst alles 
Plattformen eine sinnvolle Umsetzung gibt.

Thomas M. schrieb:
> Wenn es in einer extra Lib ist, die aber mitgeliefert wird, wie eben bei
> Pascal..dann nutzt Du sie einfach nicht.

Dann ist es aber eben nicht Teil des Standards. Unter Windows gibt's 
eben die conio.h mit diversen Konsolen-Funktionen. Unter Linux findest 
du erase() in curses.h. Dein "Problem" ist also keines.

Thomas M. schrieb:
> Heutzutage  werden die aber üblich im Windows getestet..und da gibt es
> nun in C plötzlich >Probleme wenn man mit der ESC Sequenz arbeitet..
> Wieso werden hier immer die Fakten völlig verdreht?

Was kann nun C dafür, dass Windows sein Verhalten ändert.

Thomas M. schrieb:
> Somit können wir uns den Hahnenkampf um C vs. Pascal ja auch sparen.

Warum fängst du ihn dann an?

von Yalu X. (yalu) (Moderator)


Lesenswert?

Thomas M. schrieb:
> In anderen Sprachen wie D ist es die disp.h

In D gibt es weder Dateien mit der Endung .h noch ein Äquivalent zur
ClrScr-Funktion. Das geht dort wie in C über externe Bibliotheken.

: Bearbeitet durch Moderator
von Thomas M. (Firma: https://img.favpng.com/23/21/3) (thomasmopunkt)


Lesenswert?

vn n. (wefwef_s)
na in Pascal geht es aber unter allen Windowsversionen...

: Yalu X.
aber in D wird diese mitgeliefert..

ob nun .h oder nicht .h ;-)
Ich sehe gerade das bezieht sich aud C++ im D Forum..also ziehe ich 
meinen Einwand vorerst..zurück;-)
https://forum.dlang.org/thread/9ma8nu$oc7$1@digitaldaemon.com

: Bearbeitet durch User
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.