Alternative zu clrscr ()

Schnelle objektorientierte, kompilierende Programmiersprache.
nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Alternative zu clrscr ()

Beitrag von nufan » Do Jul 10, 2008 2:08 pm

Xin hat geschrieben:

Code: Alles auswählen

#ifdef WINDOWS
#include <conio.h>
#endif

void myClear()
{
#ifdef LINUX || UNIX || MAC || AMIGA
  printf( "\033[J" );
#endif
#ifdef WINDOWS
  clrscr();
#endif
}
#endif                            // ?
1. Ist das nicht ein endif zu viel?
2. Braucht man im Header nicht stdio.h für printf?
3. Bekomme ich immer ien Compiler-Warnung: Cannot create pre-compiled header: code in header
4. Wird immer noch der ganze Text angezeigt.

Der Code sieht jetzt so aus:

Code: Alles auswählen

#include <stdio.h>
#include "myheader.h"

int main ()
{

  printf ("Dieser Text wird nie angezeigt");

  myClear ();

  printf ("Hello World");

  return 0;

}

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Alternative zu clrscr ()

Beitrag von Xin » Do Jul 10, 2008 3:23 pm

dani93 hat geschrieben:1. Ist das nicht ein endif zu viel?
Yepp, aber ich baue auch nicht für jede Antwort eine Test-Suite auf, um die Richtigkeit meiner Antwort in allen Punkten zu garantieren.
Solange Du verstehst, was gemeint ist, überlasse ich das Dir. ^^
dani93 hat geschrieben:2. Braucht man im Header nicht stdio.h für printf?
Nicht, wenn Du es vorher einbindest... ;-)
Ich halte Dich nicht ab, es hinzuzufügen. ^^
dani93 hat geschrieben:3. Bekomme ich immer ien Compiler-Warnung: Cannot create pre-compiled header: code in header
Könnte daran liegen, dass Code im Header liegt. Pech für den Compiler.
Ich könnte auch ein komplettes Projekt inkl. Makefile anlegen, das sind dann vier Dateien, die ich in einen Beitrag packen soll?
Das auseinander zufriemeln und Dich mit Deinem Compiler anzufreunden ist nicht Teil des beschriebenen Problems, also gehe ich davon aus, dass Du das selbst machen kannst. :-)
dani93 hat geschrieben:4. Wird immer noch der ganze Text angezeigt.
Das ist schlecht, aber leicht nachzuvollziehen, weil Du nirgendwo bestimmt hast, für welche Plattform Du kompilierst. Und wenn es kein Windows und auch kein sonstiges ist, dann ist clrscr() eine leere Funktion.

Beim gcc würdest Du nun gcc -DWINDOWS aufrufen und der Compiler würde entsprechend eine Windows-Version erzeugen.
Schau bei Deinem Compiler mal, wo Du vordefinierte Makros oder Defines angeben kannst.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Alternative zu clrscr ()

Beitrag von nufan » Do Jul 10, 2008 3:38 pm

Schau bei Deinem Compiler mal, wo Du vordefinierte Makros oder Defines angeben kannst.
Ich hab da so nen Menüpunkt gefunden:
Compiler - Defines
Und dann is da ein leeres Feld, wo man was eingeben kann.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Alternative zu clrscr ()

Beitrag von Kerli » Do Jul 10, 2008 3:43 pm

Zusätzlich gibt es ja auch noch die vordefinierten Makros. Unter http://predef.sourceforge.net/index.php gibt es eine Auflistung von ws so ziemlich allen Makros.

Für Windows kann man zb #ifdef _WIN32 verwenden. Das ist unter allen 32/64 Bit Windowsversionen definiert...
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Alternative zu clrscr ()

Beitrag von nufan » Do Jul 10, 2008 3:46 pm

Mann im neuen Forum gehts ja richtig rund. Kaum einen Beitrag fertig gelesen, ist schon der nächste da :D
Gut so.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Alternative zu clrscr ()

Beitrag von nufan » Sa Okt 11, 2008 8:33 pm

So, der Thread soll auch mal ein ordentliches Ende haben.
Xin's Vorschlag

Code: Alles auswählen

printf("\033[J");
funktioniert bei mir auch unter Ubuntu nicht. Dafür macht aber

Code: Alles auswählen

printf("\033[H\033[J");
was ich will.

Das Prog sieht dann so aus:

Code: Alles auswählen

#include <stdio.h>
#include <myHeader.h>              // habs nach include kopiert

int main (void)
{

  printf ("Wird man (hoffentlich) nie sehen");

  myClear ();

  printf ("Hello World\n");

  getchar ();

  return 0;

}
Und "myHeader.h" sieht so aus:

Code: Alles auswählen

#ifdef _WIN32
  #include <conio.h>
#else
  #include <stdio.h>
#endif

void myClear (void)
{

  #ifdef _WIN32
    clrscr ();
  #else
    printf("\033[H\033[J");
  #endif

}
Funktioniert bei mir unter Windows und Ubuntu :)

Lg

Antworten