@DaNemeziz
So als ich dein "Tutorial" gesehen habe, bin ich vor Lachen fast vom Stuhl gefallen! Ich werde jetzt deine gesamtes "Tutorial" auseinandernehmen und alles richtigstellen!
Als ich ein bisschen durchs C++ Forum gestöbert bin hab ich viele Threads gefunden in denen gefragt wurde ob man das
automatische Schließen einer Konsole komplett verhindern kann. Die Antworten waren meist "nein", was glücklicher Weise nicht
stimmt.
1. Wie kommst du denn auf diese Idee? Liefer mal einen Link und stell nicht irgendwelche Gerüchte auf!
So sieht bei mir ein gewöhnlicher C++ Script aus:
2. Die Stelle mag ich ganz besonders! Sag mal weißt du überhaupt den Unterschied zwischen einer Hochsprache (C++, Pascal) und einem Skript (JavaScript, PHP) ist?
#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
cout << "Automatisches Schließen eines Konsolenprogrammes verhindern!";
while(true)
{
while(GetAsyncKeyState(0x07) < 0)
{
return 0;
}
}
}
3. Was ist das denn? Wieso benutzt du nicht noch mehr Headerfiles und rufst zum Spaß nicht noch mehr Funktionen auf! Ich meine man kann für den gewünschten Effekt auch 1000 Funktionen aufrufen. Die Frage ist nur, was das bringt!
Es wurde jetzt schon ein paar mal geschrieben, aber ich werde es trotzdem nochmal zeigen.
int main()
{
while(1) ;
return 0 ;
}
Dieser Code reicht völlig aus um den gewünschten Effekt mit jedem Compiler kompilieren zu können.
Man schreibt "return 0;", weil main() einen Rückgabewert vom Typ Integer hat. Man kann es aber bei manchen Compilern auch ohne kompilieren.
Ich hoffe ich konnte ein bisschen weiterhelfen (oder auch nicht [?]).
@Moderatoren: Ich denke, dass diese kleine Tutorial auch noch sehr gut hier her passt.
4. Helfen? Oh mein Gott, das war auf einer Skala von 1 bis 10 gar nichts, denn es liegt im negativen Bereich. Mein Freund, das war ein Schritt zurück und nicht vor. Wenn du etwas nicht weißt oder dir nicht sicher bist, dann schreibe nächste mal nicht "Tutorial"! Wenn Leute nach diesem Problem im Internet suchen, stoßen sie darauf und es verbreiten sich falsche Informationen!
Trotzdem mit freundlichen Grüßen
WilMen
Speziell solltest du dir den Teil anschaun wo folgendes Problem thematisiert wird.
Wenn man sich zufalls Zahlen ausgeben lässt sind diese zwar zufällig aber wenn man das Programm erneut startet bekommt man die selben Zahlen wieder, ist aber glaub ich im Artikel erklärt
Bei meinen Basteleien mit Konsolenprogrammen habe ich festgestellt, das die Ausgabe in ein Konsolen-Fenster doch ziemlich lahmt (~20% CPU-Auslastung auf 800MHz-Rechner bei ~10fps, 80x25 Zeichen).
Im Vollbildmodus scheint das um einiges besser zu laufen, weshalb ich dann gern die fps hochfahren moechte.
Dazu sehe ich grundsaetzlich 2 Loesungsansaetze: Feststellen, ob die Konsole im Vollbildmodus ist, und danach die fps regeln, und die fps nach dem Gesamt- CPU-Auslastung regeln.
Wie kann ich das jeweils anfangen? Wichtig dabei: Das ganze muss noch Win9x-Kompatibel sein. Funktionen wie GetConsoleDisplayMode kann ich daher nicht benutzen.
Waere fein, wenn jemand dazu ein paar Stichworte haette.
warum so umständlich?
SetConsoleTitle ("jkagfuzaf");
oder wenn du den per Usereingabe ändern willst:
char Title[30];
cin >> Title;
SetConsoleTitle (Title);
Bevor du solche fragwürdigen Tips gibst, lern C - "void main()" kann man eventuell noch durchgehen lassen, obwohl's nicht durch den Standard abgedeckt wird, aber "fflush(stdin);" ist UNDEFINIERT.
@Apeman:
Für mich sind Template-Funktionen richtige Funktionen, nur das sie statische Parameter haben. Ich könnte zB einen std::vector ohne Templates auch nur schwer nachprogrammieren (nur mit blödem gecaste, aber das will man ja nicht).
Du kannst Arrays mit statischer Größe auch ohne Templates per Referenz übergeben, musst dann aber die Größe immer mirangeben und diese Arbeit nehmen einem die Templates ja ab, also warum nicht. Das würde auch den typischen Anfängerfehlern vorbeugen, die sizeof() auf eine übergegebenes Array anwenden. sizeof() funktioniert nämlich richtig für Array-Referenzen.
Gruß
Don06
Letzten Endes wird die Identität einer DLL durch Ihren Startpfad und Namen definiert. Eine identische DLL in einem anderen Verzeichnis wird von Windows als ein neues Modul angesehen.
Woran sollte Windows sonst erkennen, dass eine DLL gleich ist...
Verwende eine Memory Mapped File um den Effekt auch über unterschiedliche Module zu erreichen.
Dieser Thread wurde von Moderator/in estartu aus dem Forum MFC (Visual C++) in das Forum DOS und Win32-Konsole verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?
Dieses Posting wurde automatisch erzeugt.
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum DOS und Win32-Konsole verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?
Dieses Posting wurde automatisch erzeugt.
progerchris schrieb:
Kann man denn nicht auch mit den variablen x rechnen, die eben keinen bestimmten Wert haben. So wie bei f(x) = 2x +2. Man müsste ihm irgendwie sagen können, dass das x zu der Zahl vor x gehört.
Das wäre ganz nett, um z.B. (5x^2+2x+5)/(x+2) zu rechnen.
Falls Du damit so was wie Algebra meinst, dann hilft Dir diese Seite hier vieleicht weiter:
http://www.mathtools.net/C_C__/Mathematics/
Oder schau mal hier nach 'Algebra': http://www.freetechbooks.com/
Guenther
ja, zig mal 0x0d und 0x0a ausgeben.
Schlecht, da sehr langsam. Außerdem weißt du nicht wie oft du das ausgeben musst - garantierte Größen der Konsole gibt es nicht.
Ich habe was gefunden -> system("CLS");
Schlechteste Möglichkeit aus genannten Gründen.
Mit ANSI Escape-Squenzen klappt das auf jedem kompatiblem Terminal. Und das sind die meisten.
Wie in der FAQ beschrieben unter Windows nicht mehr. Ab Win2k sind die nicht mehr mit an Board und somit in diesem Fall auch unbrauchbar.
Die Lösung ist in der conio.h lib zu finden:
Die liefert der aktuelle MSVC nicht mehr mit clrscr() aus. Daher gibt es Ersatz-Bibliotheken wie z.B. die Improved Console.
Da du ja, wie im anderen Thread beschrieben, bereits die Improved Console einsetzt. Kannst du mit Hilfe von:
clrscr();
ganz simpel den Bildschirm löschen
MfG SideWinder
Natürlich funktioniert gotoxy(), die kommt auch aus der IC, da der VC sie so gar nicht mehr mitbringt. Du kannst sie natürlich einsetzen. Korrekterweise hast du den Namespace "shorties" ja miteingebunden!
Und natürlich funktioniert es auch mit Variablen. Nur liefert getMaxWndSizeX() nicht die derzeitige Fenstergröße sondern die MAXIMALE Fenstergröße! Die maximale Fenstergröße / 2 wird immer noch größer gewesen sein als deine derzeitige Fenstergröße -> gotoxy() setzt den Cursor nicht.
getWndSizeX() liefert die AKTUELLE Fenstergröße, diese durch 2 ergibt die Mitte des Fensters. Folglich:
int x = con.getWndSizeX() / 2;
int y = con.getWndSizeY() / 2;
gotoxy(x,y);
cout << '*';
MfG SideWinder