Frage zu C auf Mac vs. Dose

Dieses Thema im Forum "Mac OS X Entwickler, Programmierer" wurde erstellt von Danny4, 23.11.2003.

  1. Danny4

    Danny4 Thread Starter MacUser Mitglied

    Beiträge:
    133
    Zustimmungen:
    0
    MacUser seit:
    07.11.2002
    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:
     
  2. Descartes

    Descartes unregistriert

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

    Danny4 Thread Starter MacUser Mitglied

    Beiträge:
    133
    Zustimmungen:
    0
    MacUser seit:
    07.11.2002
    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.
     
  4. thebigc

    thebigc MacUser Mitglied

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

    Descartes unregistriert

    Beiträge:
    189
    Zustimmungen:
    0
    MacUser seit:
    14.12.2002
    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);

     
Die Seite wird geladen...

Diese Seite empfehlen