Frage zu C auf Mac vs. Dose

  1. Danny4

    Danny4 Thread StarterMacUser Mitglied

    Mitglied seit:
    07.11.2002
    Beiträge:
    133
    Zustimmungen:
    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:
     
    Danny4, 23.11.2003
  2. Descartes

    Descartesunregistriert

    Mitglied seit:
    14.12.2002
    Beiträge:
    189
    Zustimmungen:
    0
    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;
    }
     
    Descartes, 23.11.2003
  3. Danny4

    Danny4 Thread StarterMacUser Mitglied

    Mitglied seit:
    07.11.2002
    Beiträge:
    133
    Zustimmungen:
    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.
     
    Danny4, 24.11.2003
  4. thebigc

    thebigcMacUser Mitglied

    Mitglied seit:
    19.09.2003
    Beiträge:
    190
    Zustimmungen:
    0
    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 :)
     
    thebigc, 24.11.2003
  5. Descartes

    Descartesunregistriert

    Mitglied seit:
    14.12.2002
    Beiträge:
    189
    Zustimmungen:
    0
    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
    wgetchmvgetchmvwgetchungetchhas_key get (or push back)
           
    characters from curses terminal keyboard

    SYNOPSIS
           
    #include <curses.h>

           
    int getch(void);
           
    int wgetch(WINDOW *win);
           
    int mvgetch(int yint x);
           
    int mvwgetch(WINDOW *winint yint x);
           
    int ungetch(int ch);
           
    int has_key(int ch);

     
    Descartes, 25.11.2003
Die Seite wird geladen...