Escape sequenz funktioniert nicht
-
Hi, ich hab gerade ein paar Übungen aus meinem Buch gemacht und bin dann auf ein
Code Beispiel gestoßen wo eigentlich um Makros ging, aber da waren auch so Escapesequenzen dabei die mann zur Steuerung des Bildschirms benutzen kann^^
Ich wollte die mal ausprobieren und habe vollgenden Code geschrieben ^^//Übung #include<iostream> #define loeschen (cout << "\033[2J" << endl)//sollte eig den Bildschirm //löschen using namespace std; int main() { cout << "hallo" << endl; loeschen; }
aber es tut sich nichts und es kommt dann blos das "Hallo" und darunter ein feil und "[J2".
Ich benutze VC++ express Edition 2008
Könnt ihr mir sagen warum es nicht geht und wie ich es wieder hin bekomme?
fg Wurst
-
Versuchs mal mit:
"\E[H\E[2J"
(Hab ich [url] http://forum.mods.de/bb/thread.php?TID=191913[/url] gefunden)
oder mit:
system("clear");
-
hi
hab mich mal bei google umgehört ....und das sagt wenn man das so wie du macht dann müsste man eine libary runterladen namens conio.o
wies sonst geht weiß ich aber selber net weil ich noch n anfänger bin
-
sry hab mich verklickt ...
gute gelegenheit um zu fragen wie ich meinen eigenen einträge lösche
-
schrieb mal zu #include <iostream>
noch #include <conio.h>
dazu
-
linux: system("clear");
windows: system("cls");
-
Vergiss, was die anderen hier bisher für Halbwahrheiten und Hackerlösungen präsentiert haben.
Der Grund, wieso das nicht funktioniert, ist, weil das eine ANSI-Escape-Sequenz ist und die kann man seit Windows Me nicht mehr benutzen. Selbst vorher musste man etwas in der Config.sys ändern. Was das system("cls") betrifft: Gewöhn dir solchen Scheiß erst gar nicht an. Du gibst ja Texte auch nicht mit system("echo") aus.Also: Die korrekte Variante, um in einer Konsolenanwendung unter Windows den Bildschirm zu löschen, findest du unter anderem hier: http://www.daniweb.com/code/snippet232.html
Dafür werden WinAPI-Funktionen benutzt.
-
Texter schrieb:
Vergiss, was die anderen hier bisher für Halbwahrheiten und Hackerlösungen präsentiert haben.
Der Grund, wieso das nicht funktioniert, ist, weil das eine ANSI-Escape-Sequenz ist und die kann man seit Windows Me nicht mehr benutzen. Selbst vorher musste man etwas in der Config.sys ändern. Was das system("cls") betrifft: Gewöhn dir solchen Scheiß erst gar nicht an. Du gibst ja Texte auch nicht mit system("echo") aus.Also: Die korrekte Variante, um in einer Konsolenanwendung unter Windows den Bildschirm zu löschen, findest du unter anderem hier: http://www.daniweb.com/code/snippet232.html
Dafür werden WinAPI-Funktionen benutzt.Danke, ich wollte es gerade posten, wäre dann aber zu spät zu meinem Termin gekommen. Teilweise echt schlimm, was hier an Code präsentiert wird. Ansonsten bring ich diesen Link an dieser Stelle noch einmal:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39453.html
-
Teilweise echt schlimm, was hier an Code präsentiert wird.
Es ist ein Forum, keine Uni ... ächz
Manchmal kommen aber brauchbare Tips 'rüber. Also - don't panic !
-
Scheppertreiber schrieb:
Teilweise echt schlimm, was hier an Code präsentiert wird.
Es ist ein Forum, keine Uni ... ächz
Manchmal kommen aber brauchbare Tips 'rüber. Also - don't panic !
Das ist richtig, aber deswegen schrieb ich auch "teilweise". Natürlich kommen hier auch - ich will mich nicht festlegen - sehr gute Beiträge.
-
Texter schrieb:
Vergiss, was die anderen hier bisher für Halbwahrheiten und Hackerlösungen präsentiert haben.
Der Grund, wieso das nicht funktioniert, ist, weil das eine ANSI-Escape-Sequenz ist und die kann man seit Windows Me nicht mehr benutzen. Selbst vorher musste man etwas in der Config.sys ändern.Merde. Und warum ist das so? Diese Escape-Sequenzen sind soch sicherlich im Standard festgehalten, oder? Muss das sein dass es bei MS wieder ne Extrawurscht gibt? (Sry, ich weiß, OT und geflenne, aber ich frag mich halt echt manchmal...)
-
Och ne ... M$ und Standards ... meinst Du das Ernst ?
-
franz schrieb:
Diese Escape-Sequenzen sind soch sicherlich im Standard festgehalten, oder?
In welchem Standard erwartest du, dass dies festgehalten sein soll? C++ Standard jedenfalls ganz sicher nicht. Und das Windows kein Unix ist, sollte wohl bekannt sein, wobei ich nicht mal weiss, ob diese Zeichenfolge unter Unix Standard ist. Es ist schlicht der komplett falsche Weg, wenn man sowas aus C++ heraus machen möchte. Daran hat Microsoft also überhaupt keine Schuld. Gibt genügend anderes, was man denen anhängen kann
Grüssli
-
Dravere schrieb:
In welchem Standard erwartest du, dass dies festgehalten sein soll? C++ Standard jedenfalls ganz sicher nicht. Und das Windows kein Unix ist, sollte wohl bekannt sein, wobei ich nicht mal weiss, ob diese Zeichenfolge unter Unix Standard ist.
Ich hab vllt. etwas weit gedacht
ANSI ist ja eine amerikanische Stelle zur Normierung, also nicht irgend eine unbedeutende Institution. Wenn man von C spricht meint man ja auch (so weit mir bekannt) das ANSI-C.
Drum hab ich einfach mal gedacht, dass ihre Escape-Sequenzen auch anerkanntermaßen im C-Standard o.ä. untergebracht sind.
Aber scheinbar hab ich da falsch gedacht...Ist mir auch klar, dass das keine Lösung für C++ ist. Dafür könnte man ja was in iomanip drehen.
-
@franz,
Ich glaube du bringst da ein paar Dinge durcheinander:
1. Gibt es den ASCII Zeichensatz, welcher von ANSI standardisiert wurde. Dieser Zeichensatz enthält aber keine solche Escapesequenz.
2. Gibt es ANSI das ist eine Institution zur Normierung in Amerika. Ähnlich wie DIN in Deutschland.
3. Wir sind hier im C++ Forum und es wurde über C++ geredet, nicht über eine C Lösung. Allerdings ist glaube ich auch nichts in der Art im C Standard vermerkt, nur weiss ich das nicht zu 100%. Es würde mich jedenfalls überraschen.
4. ANSI-C ist die standardisierte Form von C. Ist das gleiche wie ISO-C (der internationale Standard).
5. ANSI-C++ ist die standardisierte Form von C++. Ist das gleiche wie ISO-C++ (der internationale Standard).
6. Mir wäre nicht bekannt, dass ANSI, ISO oder DIN irgendwo so eine Escapesequenz jemals standardisiert hätten.(Die Standards haben eigentlich noch genauere Bezeichnungen, die habe ich aber einfach mal weggelassen)
Deshalb ist mir dieser Satz von dir ein wenig ein Rätsel:
Drum hab ich einfach mal gedacht, dass ihre Escape-Sequenzen auch anerkanntermaßen im C-Standard o.ä. untergebracht sind.
Wessen? Von ANSI? Siehe oben!
So eine Escape-Sequenz ist nunmal platformabhängig. Absolut gar keine Standardisierung vorhanden. Zumindest nach meinem Wissensstand.Grüssli
-
Dravere schrieb:
6. Mir wäre nicht bekannt, dass ANSI, ISO oder DIN irgendwo so eine Escapesequenz jemals standardisiert hätten.
-
Braunstein schrieb:
Dravere schrieb:
6. Mir wäre nicht bekannt, dass ANSI, ISO oder DIN irgendwo so eine Escapesequenz jemals standardisiert hätten.
Ah, danke!
Hätte nicht gedacht, dass man wirklich sowas standardisiert hat.Grüssli
-
ok Danke schon mal für die ganzen Antworten!
Aber mein Problem ist damit auch nicht geholfen^^
[url]http://www.daniweb.com/code/snippet232.html [/url]
Da ist zwar ein Code der den Bildschirm löscht aber es muss doch auch irgendwie anders gehen oder? weil ich bin noch totaler Anfänger und das hier check ich gar nicht^^void clrscr(void) { COORD coordScreen = { 0, 0 }; // upper left corner DWORD cCharsWritten; DWORD dwConSize; HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo(hCon, &csbi); dwConSize = csbi.dwSize.X * csbi.dwSize.Y; // fill with spaces FillConsoleOutputCharacter(hCon, TEXT(' '), dwConSize, coordScreen, &cCharsWritten); GetConsoleScreenBufferInfo(hCon, &csbi); FillConsoleOutputAttribute(hCon, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten); // cursor to upper left corner SetConsoleCursorPosition(hCon, coordScreen); }
gibt es da nicht auch einen einfacheren weg den Bildschirm zu löschen oder die seine Farbe zu ändern?
fg Wurst
-
Unter Windows kannst du mit
system("cls")
das Konsolenfenster leeren.
-
Nexus schrieb:
Unter Windows kannst du mit
system("cls")
das Konsolenfenster leeren.
Das oben gezeigte ist aber definitiv das schönere und imo auch elegantere..