System Befehle
-
Hallo,
in der HS arbeiten wir mit dem Borland C++ v. 5
Der Prof. gibt zum offen halten des Fensters immer system("pause") ein.
Wie ich schon im Forum gelesen habe sollte man solche Befehle vermeiden.
Mein Compiler zu Hause "Turbo C++, Version 4.5, Copyright 1991, 1995, Borland"
bringt immer Fehler, wenn ich mit einem system Befehl arbeite.Compiling SPIEL.CPP: Error SPIEL.CPP 23: Call to undefined function 'system' in function main()
Wie schaffe ich es, ohne Systembefehl den Bildschirminhalt zu löschen. (Bei DOS "cls")
Vielen Dank
PhJ
-
steht sicherlich in der faq.
ich machs meistens so (aus der faq uebernommen :)):#include <iostream> using namespace std; void wait(); int main() { /* unglaublich viel unglaublich komplexer code dessen ergebnis in form einer ausgabe unglaublich wichtig ist und unglaublich lange angezeit werden muss um unglaublich aufmerksam gelesen zu werden */ wait(); return 0; } void wait() { cin.clear(); cin.ignore( cin.rdbuf()->in_avail() ); cin.get(); }
ungetestet, ohne gewaehr.
mfg,
julian
-
Erstens: Für system() - wenn du es denn unbedingt nutzen willst - benötigst du den Header <cstdlib>
Zweitens: Den Bildschirm löschen kannst du nicht mit Standardmitteln - versuch's mal mit der "Improved Console".
-
Ich glaube, er meint einen clear()-Ersatz...
Da wirst du mgl. mit nicht Standard weiterkommen: Stichwort: "conio.h"
-
Naja, die conio.h ist bei vielen Compilern nicht in der vollständigen Ausführung mit dabei. (Bei Borland afaik aber schon). Das schränkt die Portabilität des Codes natürlich enorm ein, weswegen ich direkt auf die WinAPI zurückgreifen würde. Hier eine Beispielfunktion zum Löschen des Bildschirmes:
void ClearScreen () { COORD coordScreen = { 0, 0 }; DWORD cCharsWritten; CONSOLE_SCREEN_BUFFER_INFO csbi; DWORD dwConSize; HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); GetConsoleScreenBufferInfo(hConsole, &csbi); dwConSize = csbi.dwSize.X * csbi.dwSize.Y; FillConsoleOutputCharacter(hConsole, (TCHAR) ' ', dwConSize, coordScreen, &cCharsWritten); GetConsoleScreenBufferInfo(hConsole, &csbi); FillConsoleOutputAttribute(hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten); SetConsoleCursorPosition(hConsole, coordScreen); }
-
Hier unter Linux wird das ebensowenig funzen wie unter anderen Systemen, portabel ist das also alles nicht...
-
CStoll schrieb:
Erstens: Für system() - wenn du es denn unbedingt nutzen willst - benötigst du den Header <cstdlib>
Der Header windows.h reicht auch
-
Hier unter Linux wird das ebensowenig funzen wie unter anderen Systemen, portabel ist das also alles nicht...
Ich meinte Portabilität auf andere Compiler. Wenn man es platformunabhängig haben will, muss man sich nen Wrapper schreiben.
Toa schrieb:
Der Header windows.h reicht auch
Wenn man allerdings nur die windows.h einbindet, bringt das den Nachteil mit sich, dass der Code nichtmehr auf andere Platformen portierbar ist, da auf anderen System die windows.h garnicht existiert. Deshalb lieber die cstdlib, oder iostream.
-
Toa schrieb:
CStoll schrieb:
Erstens: Für system() - wenn du es denn unbedingt nutzen willst - benötigst du den Header <cstdlib>
Der Header windows.h reicht auch
Bei Standardfunktionen solltest du lieber die entsprechenden Standad-Header verwenden als irgendwelche Systemheader, die dies "zufällig" einbinden.
@Topic: Bildschirm löschen geht nicht auf portablem Weg (außer vielleicht, du schreibst so viele Leerzeilen, bis der alte Konsoleninhalt aus dem Bild gelaufen ist), da mußt du für jedes System eine eigene Lösung entwickeln und notfalls per Präprozessor die richtge auswählen.