Problem mit C++-Programm

03/03/2012 13:15 _Roman_#1
Hallo Leute,

ich hab mir vor kurzem n Buch zum Lernen von C++ gekauft.. Auf der Seite wo ich grad bin gibt es n Beispielprogramm, das hab ich mir abgeschrieben.. Aber das will nicht funktionieren und ich hab keine Ahnung warum..
Hier erstmal der Quelltext:

// Es werden drei Zufallszahlen ausgegeben

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
unsigned int x;
int z1, z2, z3;

cout << " --- Zufallszahlen --- \n" << endl;
cout << "Initialisierung des Zufallszahlengenerators\n"
<< "Geben Sie eine ganze Zahl ein: ";
cin >> x; // Eine ganze Zahl einlesen

srand( x); // und damit den Zufallszahlengenerator initialisieren

z1 = rand(); // drei Zufallszahlen erzeugen.
z2 = rand();
z3 = rand();

cout << "\nDrei Zufallszahlen: "
<< z1 << " " << z2 << " " << z3 << endl;
cin.get();
return 0;
}

Das ist der Programmcode.. Man soll also eine Zahl eingeben und das Programm erzeugt dann zufällig 3 Zahlen..
Hab den Code genauso abgeschrieben wie er im Buch steht, aber wenn ich das Programm nun starte, geht es zwar.. Aber wenn ich eine beliebige Zahl eingebe, schließt sich das Programm einfach ohne Vorwarnung und ohne dass ich die 3 Zahlen sehen kann..
Das Einzige was der Debugger anzeigt ist dann:
Das Programm "[3160] Der Typ void für Funktionen.exe: Systemeigen" wurde mit Code 0 (0x0) beendet.

Allerdings kann ich damit leider nichts anfangen bzw. weiß nicht, was ich ändern soll, damit es klappt..
Ich hoffe, ihr könnt mir helfen.

MfG Roman
03/03/2012 13:48 Zwawo#2
Nach
Code:
 cin >> x; // Eine ganze Zahl einlesen
fehlt ein "cin.get();".
Dann müsste es funktionieren.
03/03/2012 14:03 MoepMeep#3
Ist doch das vollkommen richtige verhalten, wo ist dein Problem?
03/03/2012 14:05 _Roman_#4
@Zwawo*, hatte ich auch schon stehen, hat nicht funktioniert..

@MoepMeep: Naja in meinem Buch steht, dass das Programm mir dann eigentlich 3 zufällige Zahlen anzeigen soll, was allerdings nicht der Fall ist.. Deswegen frag ich

EDIT: Jetzt gehts, hab einfach noch ein cin.get(); nach dem cin eingefügt. Danke!
03/03/2012 19:40 MoepMeep#5
Quote:
Originally Posted by _Roman_ View Post
@Zwawo*, hatte ich auch schon stehen, hat nicht funktioniert..

@MoepMeep: Naja in meinem Buch steht, dass das Programm mir dann eigentlich 3 zufällige Zahlen anzeigen soll, was allerdings nicht der Fall ist.. Deswegen frag ich

EDIT: Jetzt gehts, hab einfach noch ein cin.get(); nach dem cin eingefügt. Danke!
Programm ist fertig -> Programm geht zu. Die Methode mit std::cin.get() am Ende ist totaler Schwachsinn, ruf das Programm aus der Console auf.
03/04/2012 09:59 _Roman_#6
Wie meinst du das mit, aus der Console aufrufen. Ich mache es so: Ich starte ein neues, leeres Projekt und erstelle dann die Quelldatei. Dann schreibe ich halt das Programm. Dann die .exe erstellen und debuggen. Ohne die 2 cin.get(); geht es einfach nicht, wie soll es sonst gehen.
Die Source-Datei haste ja :D Kannst ja gerne weitere Lösungsmöglichkeiten schreiben, würde mich freuen. Aber leider muss ich bei jedem C++-Programm am Ende ein cin.get(); machen, sonst schließt es sich.
03/04/2012 10:57 MoepMeep#7
Start -> Ausführen -> cmd -> .exe ausführen -> freuen ;o
03/04/2012 13:55 jacky919#8
Quote:
Originally Posted by MoepMeep View Post
Start -> Ausführen -> cmd -> .exe ausführen -> freuen ;o
Oder im Programmverzeichnis eine kleine Batchdatei erstellen und dann freuen ;)
03/15/2012 18:18 Schlachtente#9
einfach
cin.ignore();
cin.get();

Ganz am Ende und es läuft^^
03/16/2012 13:04 Terreox#10
Dein Programm läuft, wie MoepMeep bereits sagte, so wie es laufen soll.
Der "Fehler" ist gar kein Fehler, das Programm liest eine Zahl ein -> berechnet drei Zufallszahlen -> gibt diese aus -> fertig.
Das Fenster schließt sich nach erfolgreicher Ausführung und das ist nach dem letzten cout auch erreicht. Da ein PC schneller arbeitet, als ein Mensch schauen kann, sieht es für dich nur so aus, als ob das was falsch läuft.

Mein Lösungsansatz wäre einfach die conio.h zu includen und hinter das letzte cout die funktion getch() aufzurufen. Diese Funktion wartet auf den nächsten Tastendruck und danach wird erst return 0; aufgerufen und das Fenster verschwindet.
Ich hab mir mal erlaubt deinen Source anzupassen und in einen Paste einzufügen :)
[Only registered and activated users can see links. Click Here To Register...]
03/16/2012 15:07 xNopex#11
Warum sollte er nen Header wie conio.h verwenden, der kein C++ Standard ist, der nicht von allen Compilern unterstützt wird, der von rein gar nichts Standard ist, wenn er 10000000000000000000000000000000 Möglichkeiten hat, das OS unabhängig mit Standard C++ zu lösen? Versteh nicht, warum das immer vorgeschlagen wird.... :facepalm:
03/17/2012 00:27 Terreox#12
Quote:
Originally Posted by xNopex View Post
Warum sollte er nen Header wie conio.h verwenden, der kein C++ Standard ist, der nicht von allen Compilern unterstützt wird, der von rein gar nichts Standard ist, wenn er 10000000000000000000000000000000 Möglichkeiten hat, das OS unabhängig mit Standard C++ zu lösen? Versteh nicht, warum das immer vorgeschlagen wird.... :facepalm:
Warum sollte man eine mögliche Lösung für sich behalten, die vll kein C++ Standard ist, die vll nicht von allen Compilern unterstützt wird, die vll auch von rein gar nichts Standard ist, wenn es noch 1000(viele Nullen) Lösungen gibt, die du stattdessen vorschlagen könntest? Versteh nicht, warum ein funktionierender Vorschlag oft von anderen Leuten mit Füßen getreten wird.... :facepalm:
Mir ist halt grad nichts besseres eingefallen was funktioniert hätte. Normalerweise hätte ich ein getchar() benutzt, nur funktionierte das in diesem Fall nicht. Ich bin kein C++ Pro und arbeite auch mehr mit Qt, wo ich mich um solche Probleme nicht unbedingt kümmern muss. Aber wenn es soviele (bessere) Vorschläge gibt, dann könntest du die ja posten anstatt rumzuflamen :)
03/17/2012 01:20 xNopex#13
Quote:
Warum sollte man eine mögliche Lösung für sich behalten, die vll kein C++ Standard ist, die vll nicht von allen Compilern unterstützt wird, die vll auch von rein gar nichts Standard ist, wenn es noch 1000(viele Nullen) Lösungen gibt, die du stattdessen vorschlagen könntest? Versteh nicht, warum ein funktionierender Vorschlag oft von anderen Leuten mit Füßen getreten wird....
Weil sie einfach schlecht ist deine Lösung. Ich mach doch mein Programm nicht OS und Compilerabhängig, wegen ein paar I/O-Funktionen, wenn es dafür nicht sehr gute Gründe gibt. Und das Programm davon abzuhalten sich zu beenden ist kein guter Grund :rolleyes:
Alternative Lösungen wurden hier schon zu Hauf genannt. Es sei nochmals auf den iostream Header hingewiesen. Oder halt gleich das Konsolenprogramm über die cmd oder terminal oder was weiß ich was starten, dann hat man solche Probleme nicht. Aber das wurde ja alles bereits mehr oder weniger genannt.
03/17/2012 01:30 ms​#14
Plattformunabhängigkeit ist nur was für Leute die zu faul sind um Programme neu zu schreiben. ;O
03/17/2012 07:15 Tyrar#15
bei doch schon etwas größeren projekten sind das wohl die meisten :p