myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   C: OS unabhängige Pause (https://mygully.com/showthread.php?t=2792854)

HagenTronje 01.01.13 15:57

C: OS unabhängige Pause
 
Wenn das Programm abgelaufen ist, möchte man ja, das es sich nicht gleich schließt, sondern der User Zeit hat, sich die Ergebnisse anzusehen.
Unter Windows geht das ja schön mit system("Pause");
unter Linux funktioniert das nicht.

Was wäre die Systemunabhängige alternative?
getch() geht ja auch nichts, weils conio.h nicht gibt angeblich heißt das in Linux curses.h, aber wenn ich die einbinde, kann ichs ja wieder nicht für Windows compelieren.

Ich möchte die Selbe C Datei, ohne Anderungen, für Windows und Linux compelieren können.

Frohes neues Jahr
HagenTronje

ProgMaster 01.01.13 17:12

getchar() sollte es tun.

Madddin_89 01.01.13 19:20

ich würde es mit den
preprozessor anweisungen regeln:

[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

HagenTronje 01.01.13 20:39

Für getchar müsste ich zuerst den Tastaturpuffer leeren. wirkt doch Ziemlich unprofessionell wenn ich nur für die Pause dann 4 Zeilen brauche, oder?

Von der verlinkten Seite versteh ich nur Bahnhof.

Madddin_89 01.01.13 21:21

ganz einfach:

du wolltest dein Programm tauglich für windows und linxu machen.

falls du eine stelle im Code hast, dass sich unterscheidet, schreibst du sowas:

#ifdef __linux__
- code für
- linux
#endif
#ifdef _win32
- code für
- windows
#endif

das sind einfach anweisungen für den Compiler.
Funktioniert natürlich auch mit Includes, falls eine z.b. nur bei linux existiert.

Hoffe du hast es jetzt ein bisschen besser verstanden :)

Quabla 01.01.13 21:23

du kannst überprüfen ob varaiblen definiert sind, und damit dann auf das betriebssystem schließen. so wie es da in nem bespiel steht:

Code:

#if defined(sun) || defined(__sun)
# if defined(__SVR4) || defined(__svr4__)
/* Solaris */
# else
/* SunOS */
# endif
#endif

dann müsstest du halt ne fallunterscheidung für verschiedene betribssysteme einbauen

edit: oh da war einer schneller

HagenTronje 01.01.13 21:30

ich glaube da bin ich mit ner Schleife zum Buffer löschen und getchar() besser dran :O

Wie macht ihr das denn bei euren Programmen?

Madddin_89 01.01.13 21:31

doppelt gemoppelt hält ja bekanntlich besser :P

übrigens, ist "scanf()" nicht noch ne option für dein problem?
das gibt es bei beiden OS

ProgMaster 01.01.13 21:31

Zitat:

Zitat von HagenTronje (Beitrag 24158702)
Für getchar müsste ich zuerst den Tastaturpuffer leeren. wirkt doch Ziemlich unprofessionell wenn ich nur für die Pause dann 4 Zeilen brauche, oder?

Von der verlinkten Seite versteh ich nur Bahnhof.

Schreib eine Helper-Methode und Du hast eine oder zwei Zeilen!
Unprofessionell wäre es in eine so triviale Sache viel Zeit zu investieren, wenn man eine saubere Lösung in weniger als fünf Zeilen schreiben kann. Alles andere wäre Overhead...

Und welches "professionelle" Programm kümmert sich um die Konsolenausgabe beim Schliessen des Programms? Ich denke keines davon wird damit werben, dass die Pause plattformunabhängig und mit einer Zeile Code geschrieben wurde :D

HagenTronje 02.01.13 01:06

Aber was wenn mein Programm nur in der Konsole läuft und bewertet wird? :P

germgerm 02.01.13 15:08

Dann soll dein Bewerter dein Programm in der Konsole starten.

HagenTronje 03.01.13 23:21

es braucht aber trotzdem ne Pause bevor sichs beendet!


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:30 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.