Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 18

Thema: Bildschirm in Konsole löschen mit C

  1. #1
    Registrierter Benutzer
    Registriert seit
    11.01.2004
    Beiträge
    20

    Bildschirm löschen mit C

    Hallo!
    Kennt jemand einen Befehl in C in der man den Bildschirm in einem Konsolenprg.löscht?
    Es sollte der Funktionsweise wie die Umgebungsvar CLEAR entsprechen....

    Bitte keine Systemcalls wie: system("cls"); oder das Makro #define CLS printf("\033[2J") die sind nicht so wirkungsvoll....
    Geändert von Ciro (31-01-2004 um 09:18 Uhr)

  2. #2
    Moderator
    Registriert seit
    10.05.2001
    Ort
    Essen
    Beiträge
    26
    Meinst du nicht System("clear") ?

    Was genau bezeichnest du denn als "wirkungsvoll" ?

  3. #3
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    05.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    Ich denk auch hier hilft man ncurses
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

  4. #4
    Registrierter Benutzer
    Registriert seit
    05.07.1999
    Ort
    Zürich
    Beiträge
    221
    Code:
    #define CLS printf("\033[2J")
    sollte auch funktionieren.

    greets
    f0rtex
    Doctrína est fructus dulcis radícis amárae.

  5. #5
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Er hat geschrieben das sei nicht so wirkungsvoll.

    su -c /sbin/poweroff

    wäre recht wirkungsvoll denke ich.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  6. #6
    Registrierter Benutzer
    Registriert seit
    24.12.2001
    Ort
    anywhere before EOF
    Beiträge
    236

    Wirkungsvoll?

    Original geschrieben von Ciro
    ... oder das Makro #define CLS printf("\033[2J") die sind nicht so wirkungsvoll....
    Man belehre mich eines besseren aber wie willst du dem Terminal sonst verklickern, dass er den Screen löschen soll, wenn nicht über Escape Sequencen? ncurses macht es AFAIK auch nicht anders.
    Anyways, wie wärs mit
    Code:
    for (i = 0; i < atoi(getenv("LINES")) * atoi(getenv("COLUMNS")); i++) {
      putc(' ', stdout);
    }
    o. Ä., wober das mit dem getenv() nur hinhaut wenn die auch exportiert sind, was sie bei mir gerade nicht waren, aber du weisst was ich meine im Prinzip. Ist das dann wirkungsvoll oder was meinst du damit?
    chmod -R +t /*

  7. #7
    Registrierter Benutzer
    Registriert seit
    31.03.2003
    Beiträge
    75
    Hallo,

    ich stehe gerade vor dem selben Problem. Mein code soll allerdings in der bash als auch unter WindowsXp funktionieren, deswegen Funktionieren keine Escapesequenzen.

    Das mit der for-Schleife funktioniert bei mir auch (noch) nicht.

    Gruß

  8. #8
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    05.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    Also bei mir funktionierte die Escapesequence auch unter Win2k...
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

  9. #9
    Registrierter Benutzer Avatar von SeeksTheMoon
    Registriert seit
    22.02.2002
    Beiträge
    762
    ich glaub ab SP2 gehen die Escapes nicht mehr.
    Dann musst Du ncurses oder vielleicht die conio.h benutzen, mit denen kann man Konsolenausgaben manipulieren.
    I haven't lost my mind - It's somewhere on a backup-disc

  10. #10
    Registrierter Benutzer
    Registriert seit
    03.04.2002
    Beiträge
    112
    Und wenn du es unter beiden nutzen willst, ohne 2 versionen zu haben und ohne den Code ständig umschreiben zu müssen, dann kannst du sowas in der art machen...

    #if WIN32
    #include <conio.h>
    #else if LINUX
    #include <ncurses.h>
    #else
    printf("Falsches OS!");

    Die Syntax ist auf jeden fall falsch, aber so in der Art kannst du, je nachdem, welches OS du grad nutzt, verschiedene Header-Dateien einbinden.
    Musst allerdings auch nochmal schauen, wie du das OS abfragst...

    (Schon so lang her )
    Verteilt die Macht, dass sie keinen mächtig macht!

  11. #11
    Registrierter Benutzer
    Registriert seit
    05.04.2005
    Beiträge
    9
    #if WIN32
    #define CLEAR system( "cls" );
    #else if LINUX
    #define CLEAR system( "clear" );
    #endif

    oder so ähnlich. wie wärs damit?

  12. #12
    Registrierter Benutzer Avatar von [0x[90]|
    Registriert seit
    10.05.2005
    Ort
    Filderstadt
    Beiträge
    79
    Code:
    #include <stdio.h>
    
    #if WIN32
    		#define PERR(bSuccess, api){if(!(bSuccess)) printf("%s:Error %d from %s \on line %d\n", __FILE__, GetLastError(), api, __LINE__);}
    	void cls(HANDLE hConsole)
    	{
    		COORD coordScreen = { 0, 0 };
    		BOOL bSuccess;
    		DWORD cCharsWritten;
    		CONSOLE_SCREEN_BUFFER_INFO csbi;
    		DWORD dwConSize;
    	
    		bSuccess = GetConsoleScreenBufferInfo( hConsole, &csbi );
    		PERR( bSuccess, "GetConsoleScreenBufferInfo" );
    		dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
    		bSuccess = FillConsoleOutputCharacter( hConsole, (TCHAR) ' ',	dwConSize, coordScreen, &cCharsWritten );
    		PERR( bSuccess, "FillConsoleOutputCharacter" );
    		bSuccess = GetConsoleScreenBufferInfo( hConsole, &csbi );
    		PERR( bSuccess, "ConsoleScreenBufferInfo" );
    		bSuccess = FillConsoleOutputAttribute( hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten );
    		PERR( bSuccess, "FillConsoleOutputAttribute" );
    		bSuccess = SetConsoleCursorPosition( hConsole, coordScreen );
    		PERR( bSuccess, "SetConsoleCursorPosition" );
    		return;
    }
    #else
    	void cls(void)
    	{
    		printf("\033[2J");
    	}
    #endif
    Man bemerke den Unterschied Windows<>Linux *fg*

  13. #13
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Zitat Zitat von [0x[90]|
    Man bemerke den Unterschied Windows<>Linux *fg*
    Hmm... Ich hatte jetzt bei Windows noch auf GetConsoleScreenBufferInfoEx32 gehofft

  14. #14
    Registrierter Benutzer
    Registriert seit
    07.05.2005
    Beiträge
    15
    for(i=1;i<=15;i++)
    printf("\n");

  15. #15
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Was hast du denn für ein mini Konsolenfenster?

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •