Bildschirm löschen
-
Hi Forum
gibt es eine Funktion in C mit der ich den Bildschirm löschen kann, ich meine den Inhalt nach dem ich etwass ausgegebe habe? Die clrscr(); funktioniert nicht.Danke
Mirsad
-
Es gibt keine ANSI C Funktion dafür. Du kannst aber ANSI Secape Sequenzen benutzen, vorausgesetzt, dass deine Shell ANSI Secape Sequenzen kapiert. Unter Linux kein Problem, unter DOS ein großes, weil du ansy.sys in der config.sys includieren musst.
-
Hi supertux
also selber mehrere \n ausgeben, oder ???
mfg
mirsad
-
welches betriebsystem verwendest du?
falls du linux verwendest?kannst du es mit system("clear");bewerkstelligen,oder mit der curses bibliothek...
-
Mirsad schrieb:
Hi supertux
also selber mehrere \n ausgeben, oder ???
mfg
mirsadprintf("\033[H\033[J");
Das ist eine Escape Sequenz.
Die sytstem.... Lösung ist nicht schön
sowas ist gefährlich. Außedem kenne ich Linux Systeme, die "clear" nicht haben.
http://www.fun-soft.de/showtopic.php?threadid=3298&time=1070662657 mehr dazu
-
hi
ach ja, stimmt, ich wuste aber keine andere lösung, danke
mfg
mirsad
-
:mgsmiley system()
Um welches Betriebssytem handelt sich jetzt? Ich verschieb es dann ins betreffende Forum.
Wenn es sich um DOS und Win32-Konsole bzw. Windows handelt, dann verweise ich gleich mal auf die Konsolen-FAQ.
-
supertux schrieb:
Mirsad schrieb:
Hi supertux
also selber mehrere \n ausgeben, oder ???
mfg
mirsadprintf("\033[H\033[J");
Das ist eine Escape Sequenz.
Die sytstem.... Lösung ist nicht schön
sowas ist gefährlich. Außedem kenne ich Linux Systeme, die "clear" nicht haben.
http://www.fun-soft.de/showtopic.php?threadid=3298&time=1070662657 mehr dazu
@superturx
leider gibt es die escapesequenzen unter windwos auch nur bis win98, da danach die ansi.sys nicht mehr eingebunden werden kann (wenigstens habe ich keinen erlebt, der das geschafft hat).
leider ebensowenig standard, aber konsolenfaq hält, wie AJ schon sagte, einige weitere möglichkeiten bereit.im standard gehts dann wirklich nur mit zählen
-
leider gibt es die escapesequenzen unter windwos auch nur bis win98
wieso leider? Naja, was Windows macht, ist mir auch egal. ich weiß nur, mit ansi.sys geht das, ohne geht das nicht und ab winME kann man (soweit ich weiß und nach zahlreichen Versuchen) seine autoexec.bat und config.sys nicht schreiben, weil sie automatisch überschrieben werden, beim win98 war das nicht der Fall.
-
supertux schrieb:
leider gibt es die escapesequenzen unter windwos auch nur bis win98
wieso leider? Naja, was Windows macht, ist mir auch egal. ich weiß nur, mit ansi.sys geht das, ohne geht das nicht und ab winME kann man (soweit ich weiß und nach zahlreichen Versuchen) seine autoexec.bat und config.sys nicht schreiben, weil sie automatisch überschrieben werden, beim win98 war das nicht der Fall.
stimmt, kein leider... bezog sich im eigentlichen nur darauf, daß hier der ansi c standard gilt, und der hält sowieso nix von farben..
-
Notfalls kann man ja immer noch das tun
include<stdio.h> define CLEAR printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n") int main(){ CLEAR /*Programmblock*/ }
-
@Cico
Ich bezweifle, dass das ein Compiler schluckt.PS: Ich verschiebs jetzt ins Konsolenforum. Hierhin gehört es jedenfalls nicht.
-
Dieser Thread wurde von Moderator/in AJ aus dem Forum ANSI C in das Forum DOS und Win32-Konsole verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
@AJ ja du hast recht:-)ich dachte das fällt keinem auf bzw.man ergänzt die fehlenden präprozessor zeichen und den rest selbst...
#include <stdio.h> #define CLEAR printf("\n\n\n\n\n\n\n\n\n\n\n\n") int main(){ CLEAR; /*Programmblock*/ }
-
system ("cls");
soll man aber irgendwie nicht nehmen, funktioniert aber bei mir.
-
Hi!
Also wenn ich
clrscr()
benutze dann schreib ich die Funktions deklaration (oder definition?
)in eine Header.
#ifndef _C_Screen_H #define _C_Screen_H void clrscr() // Windows Header notwendig. { COORD coord; DWORD written; CONSOLE_SCREEN_BUFFER_INFO info; coord.X = coord.Y = 0; HANDLE std = GetStdHandle(STD_OUTPUT_HANDLE); GetConsoleScreenBufferInfo(std, &info); FillConsoleOutputCharacter(std,' ',info.dwSize.X*info.dwSize.Y,coord,&written); coord.X = coord.Y = 0; SetConsoleCursorPosition(std, coord); } #endif
Somit dürfte es doch zu keinen schwirigkeiten kommen seitens des Benutzers oder ?
cu
-
- Implementationen gehören nciht in den Header
- Grottige Implementierung
- Use Improved Console -> Konsolen-FAQMfG SideWinder
-
@dgrat
Das Problem bei system() ist, dass es den Befehl, den du übergibst einfach an den Komandozeileninterpreter des Betriebssystems weiterleitet. Wenn das zugrundeliegende Betriebssystem also CLS nicht kennt, dann bekommt der Benutzer des Programms einfach eine blöde Fehlermeldung wie:
"Befehl oder Dateiname nicht gefunden!"
Anstatt, dass der Bildschirm gelöscht wird. Und das ist ja nicht Sinn der Sache, oder?@spirit a project101
Dann doch lieber die Lösung von Cico (@Cico nicht falsch verstehen ;))
-
Hi
nagut dann packt man eben die Funktion Implementation in die cpp datei
aber warum ist dies eine so schlechte Lösung ?ich meine ist doch immer noch besser als system('clear') oder sowas ....
@SideWinder: Warum grottig ?
cu
-
SpIriT alias PrOjEcT101 schrieb:
Hi
nagut dann packt man eben die Funktion Implementation in die cpp datei
aber warum ist dies eine so schlechte Lösung ?ich meine ist doch immer noch besser als system('clear') oder sowas ....
@SideWinder: Warum grottig ?
cu
Deine Implementierung könnte man auch so schreiben:
void clrscr(void) { int x, y; for(y = 0; y < 24; ++y) { for(x = 0; x < 80; ++x) { printf(" "); } } }
Deswegen ist der Vorschlag von Cico auch besser.
Aber es gibt immer noch bessere und vor allem schnellere Lösungen, z. B. den Grafikmodus (bzw. Textmodus) neu zu initialisieren. Mehr macht, vermute ich, auch ein CLEAR bzw. CLS bzw. das entsprechende Escapekommando in der Kommandozeile auch nicht.
Was das Problem bei system() bzw. den genannten Kommandos ist, hab ich ja schon erklärt.