C++ Problem

Beagle

Ensign
Registriert
Nov. 2005
Beiträge
154
Also ich hab ein kleines Problem mit C++

Ich hab ein klitzekleines Programm mit Cygwin und g++ compiliert und es erzeugt mir auch eine exe Datei und gibt keine Fehlermeldung aus. Doch sobald ich dass Programm starten will öffnet sich für einen kurzen Augenblick die Konsole und schließt sich dann sofort wieder. Ich hab schon alles mögliche Probiert.
von return 0 über system pause bis hin zu getch.

Ich hoffe ihr könnt mir helfen

#include <iostream>
// das erste Programm
int main()
{
std::cout << "Hallo Welt!" << std::endl;
return 0;
}


MfG Beagle
 
Führ das Programm einfach in einer Konsole aus, dann passt es auf jeden Fall.
 
EDIT: omg. es ist tatsächlich so weit gekommen, dass ich Beiträge nicht mehr zu Ende lese bevor ich poste! Ich entschuldige mich für den quatsch der folgt...

---

Also wenn du eine *.exe erzeugst willst du ja anscheinend ein Windows Programm erstellen (warum mit cygwin?).
Unter Windows kannst du einfach ein
Code:
sytem("PAUSE");
vorm return einfügen... Dann wartet das Programm auf eine Tastatureingabe bevor es beendet. Unter Linux geht es so nicht. Die SuFu müsste da helfen, aber ich bin auch nicht auf die richtigen Suchbegriffe gekommen ;)
 
Also danke für die Antwort wenn ich es in der Konsole starte funktioniert es. Und zu der Frage warum ich es mit Cygwin mache mein Lehrer verwendet nur Linux und will dass er sie ohne Probleme compilieren kann. Deshalb der grund mit Cygwin. gibt es sonst ne plattformübergreifende lösung dass ich es mit doppelklick starten kann ohne dass es gleich geschlossen wird?
 
Nein, gibt es nicht. Wenn, dann mit #IFDEF. Und wenn er unter Linux arbeitet, wird er sicherlich auch schimpfen, denn an einem Programm muss bei weitem nicht die Tastatur als Standardeingabe hängen. Du kannst z.B. auch eine Datei an dein Programm pipen. Solche Abfragen die auf einen Tastendruck warten terminieren dann niemals.
 
für cygwin und andere unixoid könntest du dein programm einfach mittels sleep für ein paar sekunden schlafen legen.
also den header:
#include <unistd.h>
einbinden und als letzte zeile vor dem return
sleep(beliebige_anzahl_sekunden);
einfügen.

das ist häßlich. wenn du testen willst, ob es notwendig ist, überprüfe, ob dein input-stream bereits zu ende ist. cygwin müsste dir nämlich unter windows, wenn du das programm per doppelklick und nicht aus der konsole startest, aus kompatibilität zu x-window eine leere pipe als input-stream geben. das heißt, dass erste zeichen, das dir getchar() zurückliefert, ist -1 (aber eine leere pipe führt unter unix nicht dazu, dass cin.eof==true ist....).
daher der code dazu, bspw:
#include <iostream>

// das erste Programm
int main()
{
std::cout << "Hallo Welt!" << std::endl;
if (getchar()==-1)
{
//scheinbar windows, daher schlafen wir mal eine runde.
sleep(10);
}
else
{
//keine leere pipe, daher wahrscheinlich eine console und der user hat es schon gesehen.
}
}

das problem an der variante ist, dass sie auf einem x11-system extrem häßlich ist. wobei man bei einem x11 eh selber schuld ist, wenn man konsolenprogramme per klick startet. ;-)
 
Zurück
Oben