Frage zu C auf Mac vs. Dose

Danny4

Danny4

Aktives Mitglied
Thread Starter
Dabei seit
07.11.2002
Beiträge
135
Reaktionspunkte
0
Hallo, ich lerne gerade im Studium C. Natürlich machen wir das dort auf Dosen. Zur Zeit sind es halt nur einfache Konsolenanwendungen. Darauf bezieht sich auch gleich meine Frage.

Wenn ich im Windows die <stdlib.h> einbinden, kann ich mit system("cls") das Fenster löschen. Auf dem Mac kenner er jedoch diesen Befehl nicht. Kann mir jemand was dazu sagen?:confused:
 
Mit dem system("cls"); Aufruf startest du das Programm CLS.EXE damit es dir den Konsoleninhalt löscht (CLS = Clear Screen).

Alles was du mit system() aufrufst ist nicht mehr ANSI/ISO C und somit betriebssystemspezifisch. Was du suchst ist also ein Befehl, der dir unter UNIX (MacOSX entspricht FreeBSD wenn man mal den Kernel und die Oberfläche ausser Acht lässt) die Konsole löscht.

Wenn du unter MacOSX das Terminal.app startest und CTRL-L drückst oder "clear" eingibst wird dir der Konsoleninhalt entfernt.

Nimm also einfach mal: system("clear");

Wenn das Programm unter Windows wie unter MacOSX funktionieren soll, musst du halt eine passende Präprozessorklammerung um diese Zeile schreiben.

Vielleicht sowas:

PHP:
#include <stdio.h>
#include <stdlib.h>

int main()
{
#ifdef WIN32
  system("cls");
  printf("Windows\n");
#else
  system("clear");
  printf("alles andere (z.B. Linux, MacOSX, *BSD, ...\n");
#endif
  return 0;
}
 
Oh fein. Vielen Dank für die Erläuterung. Wusste nicht, dass nur einfach eine leckere MS-DOS-EXE gestartet wird. Vielen Dank nochmal.

Oh da fällt mir nochwas ein. Einen Einzelzeicheneingabe ohne Echo habe ich auch noch nicht hinbekommen. Auf win32 gibt es da das getch(), aber das habe ich auf mac noch nicht hinbekommen.
 
gets() getch()

hey,
leider scheinen die aufrufe gets() und getch() auch nur auf winows mit
visuell studio zu laufen.
hab das gleiche problem mit c++ im studium.
der prof ist aber ganz cool und sagt die aufgaben soll ich halt nicht machen :)
 
Die Funktion getc() gibt es sehr wohl. Nur ist es halt keine ANSI/ISO C standardisierte Funktion sondern ist auf UNIX Systemen eine Funktion der Curses bzw. NCurses Bibliothek.

Beim Compilieren musst du dann halt noch zusätzlich die ncurses Bibliothek mit "-lncurses" hinzulinken.

Beispiel:
gcc -O2 -o main main.c -lncurses

Auszug aus der Manpage "man getch":
PHP:
curs_getch(3X)                                                  curs_getch(3X)

NAME
       getch, wgetch, mvgetch, mvwgetch, ungetch, has_key - get (or push back)
       characters from curses terminal keyboard

SYNOPSIS
       #include <curses.h>

       int getch(void);
       int wgetch(WINDOW *win);
       int mvgetch(int y, int x);
       int mvwgetch(WINDOW *win, int y, int x);
       int ungetch(int ch);
       int has_key(int ch);
 
Zurück
Oben Unten